ホームページ  >  記事  >  バックエンド開発  >  第 3 章 (高度なループ) - 「php と mysql の Web 開発」と「php と mysql のプログラミング」を一緒に読む

第 3 章 (高度なループ) - 「php と mysql の Web 開発」と「php と mysql のプログラミング」を一緒に読む

WBOY
WBOYオリジナル
2016-06-20 12:37:39896ブラウズ

オブジェクトのクローン作成

オブジェクトをコピーし、オブジェクトの値の完全な cp を実行する必要がある場合は、クローン メソッド

class Corporate_Drone{    private $employeeid;    private $tiecolor;    function setEmployeeID($employeeid) {        $this->employeeid = $employeeid;    }    function getEmployeeID() {        return $this->employeeid;    }    function setTieColor($tiecolor) {        $this->tiecolor = $tiecolor;    }    function getTieColor(){        return $this->tiecolor;    }}$drone1 = new Corporate_Drone();$drone1->setEmployeeID("12345");$drone1->setTieColor("red");$drone2 = clone $drone1; //这里克隆实例$drone1,因为$drone1已经set过属性了,所以clone得时候一并复制了,$drone2->setEmployeeID("67890"); //然后这里克隆后的$drone2  set自己的属性echo "Drone1 employeeID is ".$drone1->getEmployeeID()."\n";echo "Drone1 tie color is ".$drone1->getTieColor()."\n";echo "Drone2 employeeid is ".$drone2->getEmployeeID()."\n";echo "Drone2 tie color is ".$drone2->getTieColor()."\n";----Drone1 employeeID is 12345Drone1 tie color is red   Drone2 employeeid is 67890   //这里被修改了,但是下面的color依然是实例$drone1的属性值Drone2 tie color is red

上記は、オブジェクト全体のクローンを作成するためのものです。このメソッドは、クローン作成操作中にのみ実行されます。

class Corporate_Drone{    private $employeeid;    private $tiecolor;    function setEmployeeID($employeeid) {        $this->employeeid = $employeeid;    }    function getEmployeeID() {        return $this->employeeid;    }    function setTieColor($tiecolor) {        $this->tiecolor = $tiecolor;    }    function getTieColor(){        return $this->tiecolor;    }    function __clone() {        $this->tiecolor = "blue";  //这里是指这个__clone方法会在克隆期间修改颜色tiecolor    }}$drone1 = new Corporate_Drone();$drone1->setEmployeeID("12345");$drone1->setTieColor("red");$drone2 = clone $drone1; //这里克隆实例$drone1,因为$drone1已经set过属性了,所以clone得时候一并复制了,$drone2->setEmployeeID("67890"); //然后这里克隆后的$drone2  set自己的属性echo "Drone1 employeeID is ".$drone1->getEmployeeID()."\n";echo "Drone1 tie color is ".$drone1->getTieColor()."\n";echo "Drone2 employeeid is ".$drone2->getEmployeeID()."\n";echo "Drone2 tie color is ".$drone2->getTieColor()."\n";----Drone1 employeeID is 12345Drone1 tie color is redDrone2 employeeid is 67890Drone2 tie color is blue  //看这里结果,颜色被改变了。

🎜>

相続 それは父と息子の関係であり、息子が父のスポーツカーを使用することも、自分の自転車を購入して同時に父のスポーツカーを運転することもできます。結局のところ、それは家族のものです。 。

class Employee{    private $name;    function setName($name) {        if ($name == "") echo "Name connot be blank!";        else $this->name = $name;    }    function getName() {        return "My name is ".$this->name."\n";    }}class Executive extends Employee{  //这里用extends继承,Executive 继承了Employee的类的所有属性和方法    function pillageCompany() {  //这里Executive也有自己的方法        echo "Im selling company assets to finance my yacht!";    }}$exec = new Executive();$exec->setName("richard"); //因为继承了Employee父类,所以可以setnameecho $exec->getName()."\n";  //同上$exec->pillageCompany(); //也可以使用自己的方法----My name is richardIm selling company assets to finance my yacht!
継承とコンストラクター

親クラスにコンストラクターがあり、子クラスにコンストラクターがない場合、子クラスがコンストラクターを持っているときに親クラスが実行されます。コンストラクターの場合、親クラスとサブクラスの両方にコンストラクターがある場合、サブクラスがインスタンス化されると、

親を使用して親クラスのコンストラクターを明示的に呼び出さない限り、サブクラスのコンストラクターのみが実行されます。関数を呼び出すか、親クラスのコンストラクターを直接呼び出します。 classname::__construct()

継承と遅延静的バインディング

親メソッドを静的バインディングに関連付ける必要がある状況があります。クラス属性の相互作用ですが、これらの静的クラス属性はサブクラスでオーバーライドされる可能性があります。静的クラスのスコープを定義するにはどうすればよいでしょうか。静的クラス定義自体はローカル関数ドメインにのみ存在するため、この状況についてはこれまで触れられていませんでした。プログラム 実行がこのスコープを離れても、その値は失われません。

この状況はphp5.3以降で解決されました。

class Employee{    public static $favSport = "Football"; //在class employee中的静态变量$favSport    public static function watchTV() {        echo "Watching ".self::$favSport; //这里调用了class employee的静态变量    }}class Executive extends Employee{    public static $favSport = "polo"; //在class Excutive的静态变量$favSport,由于Ex是继承了Em的,所以理当是能够覆盖变量的,但是因为执行的是静态方法watchTV,对此给出的解释是,self关键字会在编译的时候而非运行时确定其作用域,因此,结果是Football    public static function watchTV() {  //如果通过重写watchTV函数,重新定义使用的static的变量,就可以重新定义static的作用域,从而实现需要的覆盖效果        echo "Watching ".static::$favSport;    }}echo Executive::watchTV();
インターフェースと抽象クラス

インターフェースは、特定のサービスを実装するための一般的な仕様を定義し、必要な関数と定数を宣言しますが、実装方法は指定しません。重要なのは、実装する必要がある一連の一般原則を確立することです。これらの原則が満たされた場合にのみ、インターフェイスが実装されていると言えます。

抽象クラスは、インスタンス化できず、他のクラスによって継承された基本クラスとしてのみ使用できるクラスです。たとえば、メディアという名前のクラスは、さまざまな公開出版物の共通プロパティを記述するために使用されます。実際のエンティティを表すのではなく、いくつかの同様のエンティティの一般化された表現であるため、インスタンス化されず、抽象クラスとして宣言する必要があります。その後、さまざまな派生 Media クラスがこの抽象クラスを継承します。

インターフェイスの使用方法と抽象クラスの使用時期

    密接に関連するオブジェクトによって参照されるモデルを作成したい場合は、抽象クラスを使用できます。閉じたくないオブジェクトによって参照される場合は、関数の場合は抽象クラスを使用する必要があります。
  • 複数のソースから動作を継承する必要がある場合は、インターフェイスを使用します。
  • すべてのクラスが共通の動作実装を共有することがわかっている場合は、抽象クラスを使用し、その中で動作を実装します。インターフェースを実装できません。
ネームスペース

ネームスペースとは何ですか?大まかに言えば、名前空間は物事をカプセル化する方法です。この抽象的な概念はさまざまな場所で見られます。たとえば、ディレクトリはオペレーティング システムで関連ファイルをグループ化するために使用され、ディレクトリ内のファイルの名前空間として機能します。たとえば、ファイル foo.txt はディレクトリ /home/greg と /home/other に同時に存在できますが、2 つの foo.txt ファイルが同じディレクトリに存在することはできません。さらに、ディレクトリ /home/greg の外にある foo.txt ファイルにアクセスする場合、/home/greg/foo.txt を取得するには、ファイル名の前にディレクトリ名とディレクトリ区切り文字を置く必要があります。この原則をプログラミングの分野に適用したのが、名前空間の概念です。

< ?phpnamespace Foo\Bar;include 'file1.php';const FOO = 2;function foo() {}class foo{    static function staticmethod() {}}/* 非限定名称 */foo(); // 解析为 Foo\Bar\foo resolves to function Foo\Bar\foofoo::staticmethod(); // 解析为类 Foo\Bar\foo的静态方法staticmethod。resolves to class Foo\Bar\foo, method staticmethodecho FOO; // resolves to constant Foo\Bar\FOO/* 限定名称 */subnamespace\foo(); // 解析为函数 Foo\Bar\subnamespace\foosubnamespace\foo::staticmethod(); // 解析为类 Foo\Bar\subnamespace\foo,                                  // 以及类的方法 staticmethodecho subnamespace\FOO; // 解析为常量 Foo\Bar\subnamespace\FOO/* 完全限定名称 */\Foo\Bar\foo(); // 解析为函数 Foo\Bar\foo\Foo\Bar\foo::staticmethod(); // 解析为类 Foo\Bar\foo, 以及类的方法 staticmethodecho \Foo\Bar\FOO; // 解析为常量 Foo\Bar\FOO?>
この記事は Peter Yuan によって作成され、表示 - 非営利 2.5 中国本土に基づいてライセンスされています。 転載または引用する前に、著者に連絡し、著者名に署名し、記事の出典を示す必要があります。神のような少年 » 第 3 章 (上級編) - 「php と mysql の Web 開発」と「php と mysql のプログラミング」をまとめて読む

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。