PHPオブジェクトの基礎知識

4208 ワード

最近再び対象の知識を学ぶことを始めて、実は初歩的に対象と設計のモードに深く入り込んで、自分が堅持することができることを望んで、更新を維持します
PHPオブジェクトの初認識
PHPの勉強を始めたばかりの頃、方法や対象を学んだときに大きな疑問があったのを覚えています.
function get_max($val_1, $val_2)
{
   return $val_1 > $val_2 ? $val_1 : $val_2;
}

$max = get_max(23,34);
echo $max;

echo '
====================== ======================
'; // class Test { // public $val_1; public $val_2; // public function __construct($val_1, $val_2) { $this->val_1 = $val_1; $this->val_2 = $val_2; } public function get_max() { return $this->val_1 > $this->val_2 ? $this->val_1 : $this->val_2; } } // ,$test Test $test = new Test(83, 34); echo $test->get_max();

単純な方法よりも多くのコードが使われているのがわかりますが、なぜオブジェクトを使うのか、次の節で詳しく説明します.離れないで、下を見てください.
オブジェクトを使用する理由
対象とは?クラスとは?多くの人は2つを混同して、私たちはクラスを1つの工場と見なすことができて、産出した製品は対象で、つまり対象はクラスの実現です.
クラスには通常、プロパティ、メソッドが含まれます.例えば、パンを生産する機械(類)があり、パンを生成するにはいくつかの材料(属性)が必要で、材料には小麦粉、卵、水(熟知していない)が含まれています.材料があればパンを生成することができます.このとき、機械は準備した材料を一緒に処理してパンを生成します.
キーワードも重要な概念であり、public、protected、privateを含む宣言の属性またはメソッドの可視性を決定します.プロパティまたはメソッドをpublicに設定すると、オブジェクト内でもオブジェクト外でも使用できます.例えば、パンマシンにミキサーがある場合(場合のみ)、このミキサーがpublicに設定されている場合、このミキサーはどのブランドのパンマシンでも使用できます.protectedに設定されている場合は、同じブランドのパンマシンでしか使用できません(継承されたクラス).privateに設定されている場合は、自分でしか使用できません.
前節の質問に戻り、比較方法、使用対象を聞きますか?便利だから、間違いなく本当に便利です.オブジェクトには次のような特徴があります.
  • パッケージ性
  • 継承
  • マルチステート
  • パッヶージせい
    カプセル化:名前の通り、クラスの属性と方法をカプセル化し、権限(public|protected|private)を設定します.以下のようにします.
    class Test
    {
        public $val_1;
    
        protected $val_2;
    
        public function __construct($val_1, $val_2)
        {
            $this->val_1 = $val_1;
            $this->val_2 = $val_2;
        }
    
        protected function get_max()
        {
            return $this->val_1 > $this->val_2 ? $this->val_1 : $this->val_2;
        }
    }
    
    $test = new Test(83, 34);
    echo $test->get_max();

    パッケージの利点は、安全で制御可能であることです.以上のコードはprotected宣言のメソッドを参照しているため、次のエラーFatal error:Uncaaught Error:Call to protected method StudioTest::get_max() from context '' in ...
    継承
    同様に、名前の通り、分類のメソッドまたはプロパティを継承し、public|protectedキーワード宣言のメソッドまたはプロパティのみを継承します.継承の主な役割は、複数の異なるクラスが同じ方法を必要とし、継承を使用することです.たとえば、複数のWebサイトのページ(各ページは個別のクラス)がログインするかどうかを検証する必要があります.この場合、親クラスを定義してログインするかどうかを検証し、ログインを検証する必要があるクラスによって継承することができます.これにより、各クラスに認証を書く必要はありません.
    class Test
    {
        private $val_1;
    
        private $val_2;
    
        protected function set_value($val_1, $val_2)
        {
            $this->val_1 = $val_1;
            $this->val_2 = $val_2;
        }
    
        protected function getMax()
        {
            return $this->val_1 > $this->val_2 ? $this->val_1 : $this->val_2;
        }
    
        protected function getMin()
        {
            return $this->val_1 > $this->val_2 ? $this->val_2 : $this->val_1;
        }
    }
    
    class TestSub extends Test
    {
        public function __construct($val_1, $val_2)
        {
            $this->set_value($val_1, $val_2);
        }
    
        //       
        public function printMaxValue()
        {
            echo $this->getMax();
        }
    
        public function printMinValue()
        {
            echo $this->getMin();
        }
    }
    
    $test = new TestSub(83, 34);
    echo '
    ====================== ======================
    '; echo $test->printMaxValue(); echo '
    ====================== ======================
    '; echo $test->printMinValue();

    結果:===============================================================
    マルチステート
    継承関係を持つ異なるクラスのオブジェクトにクラスを書き換える方法(2つのクラスに同じ名前の方法)であり、典型的な応用は抽象クラス(abstract)とインタフェースクラス(interface)である.次のようになります.
    abstract class Vehicle
    {
        abstract public function run();
    }
    
    class Car extends Vehicle
    {
        public function run()
        {
            echo '  100';
        }
    }
    
    class Bicycle extends Vehicle
    {
        public function run()
        {
            echo '  15';
        }
    }
    
    $car = new Car();
    echo $car->run();
    echo '
    ====================== ======================
    '; $bicycle = new Bicycle(); echo $bicycle->run();

    結果:速度100==============================速度15