《PHP實(shí)例:PHP動態(tài)地創(chuàng)建屬性和方法, 對象的復(fù)制, 對象的比較,加載指定的文件,自動加載類文件,命名空間》要點(diǎn):
本文介紹了PHP實(shí)例:PHP動態(tài)地創(chuàng)建屬性和方法, 對象的復(fù)制, 對象的比較,加載指定的文件,自動加載類文件,命名空間,希望對您有用。如果有疑問,可以聯(lián)系我們。
PHP前言:PHP教程
?動態(tài)地創(chuàng)建屬性和辦法
PHP教程
?對象的復(fù)制
PHP教程
?對象的比較
PHP教程
?加載指定的文件
PHP教程
?自動加載類文件
PHP教程
?命名空間
PHP教程
示例PHP教程
1、類的相關(guān)知識點(diǎn) 3(動態(tài)地創(chuàng)建屬性和辦法)PHP教程
class/class3.php
PHP教程
<?php /** * 類的相關(guān)知識點(diǎn) 3(動態(tài)地創(chuàng)建屬性和方法) */ // 用于演示如何動態(tài)地創(chuàng)建屬性(這就是 php 中所謂的重載) class Class1 { // __set 魔術(shù)方法,當(dāng)設(shè)置的屬性不存在或者不可拜訪(private)時就會調(diào)用此函數(shù) public function __set($name, $value) { echo "__set \$name: {$name}, \$value: {$value}"; echo "<br />"; } // __get 魔術(shù)方法,當(dāng)獲取的屬性不存在或者不可拜訪(private)時就會調(diào)用此函數(shù) public function __get($name) { echo "__get \$name: {$name}"; echo "<br />"; return 999; } } $objClass1 = new Class1(); // 當(dāng)你設(shè)置的屬性不存在或者不可拜訪(private)時,就會調(diào)用對應(yīng)的 __set 魔術(shù)方法 $objClass1->property1 = wanglei; // 不可拜訪的如 private ,或者不存在的 // 當(dāng)你獲取的屬性不存在或者不可拜訪(private)時,就會調(diào)用對應(yīng)的 __get 魔術(shù)方法 echo $objClass1->property2; echo "<br />"; // 用于演示如何動態(tài)地創(chuàng)建方法(這就是 php 中所謂的重載) class Class2 { // __call 魔術(shù)方法,當(dāng)調(diào)用的實(shí)例方法不存在或者不可拜訪(private)時就會調(diào)用此函數(shù) public function __call($name, $arguments) { echo "__call \$name: {$name}, \$arguments: " . implode(', ', $arguments); echo "<br />"; } // __callStatic 魔術(shù)方法,當(dāng)調(diào)用的類方法不存在或者不可拜訪(private)時就會調(diào)用此函數(shù) public static function __callStatic($name, $arguments) { echo "__callStatic \$name: {$name}, \$arguments: " . implode(', ', $arguments); echo "<br />"; } } $objClass2 = new Class2(); // 當(dāng)你調(diào)用的實(shí)例方法不存在或者不可拜訪(private)時,就會調(diào)用對應(yīng)的 __call 魔術(shù)方法 echo $objClass2->method1("aaa", "bbb"); // 當(dāng)你調(diào)用的類方法不存在或者不可拜訪(private)時,就會調(diào)用對應(yīng)的 __callStatic 魔術(shù)方法 echo Class2::method2("aaa", "bbb");
2、類的相關(guān)知識點(diǎn) 4(對象的復(fù)制,對象的比較)PHP教程
class/class4.php
PHP教程
<?php /** * 類的相關(guān)知識點(diǎn) 4(對象的復(fù)制,對象的比較) */ // 用于演示如何復(fù)制對象 class Class1 { public $field1 = "field1"; public $field2 = "field2"; // 通過 clone 復(fù)制對象時,會調(diào)用此魔術(shù)辦法 function __clone() { echo "__clone"; echo "<br />"; } } $objClass1 = new Class1(); // 通過 clone 復(fù)制對象,會調(diào)用 __clone 魔術(shù)辦法 $objClass2 = clone $objClass1; // 通過 clone 復(fù)制的對象為淺拷貝(shallow copy),即成員數(shù)據(jù)之間的一一賦值, 而所有的引用屬性仍然會是一個指向原來的變量的引用(如果要做 deep copy 則需要自己寫) echo $objClass2->field1; // output: field1 echo "<br />"; echo $objClass2->field2; // output: field2 echo "<br />"; // 如果兩個對象的屬性和屬性值都相等,則他們“==”相等, if ($objClass1 == $objClass2) { echo '$objClass1 == $objClass2'; echo "<br />"; } // 如果兩個對象的屬性和屬性值都相等,但不是同一個類的實(shí)例,則他們“===”不相等 if ($objClass1 !== $objClass2) { echo '$objClass1 !== $objClass2'; echo "<br />"; } // 如果兩個對象是同一個類的實(shí)例,則他們“===”相等 if ($objClass1 === $objClass1) { echo '$objClass1 === $objClass1'; echo "<br />"; } // 如果兩個對象是同一個類的實(shí)例,則他們“===”相等 $objClass3 = &$objClass1; if ($objClass1 === $objClass3) { echo '$objClass1 === $objClass3'; echo "<br />"; }
3、類的相關(guān)知識點(diǎn) 5(加載指定的文件,自動加載類文件)PHP教程
class/class5.phpPHP教程
<?php /** * 類的相關(guān)知識點(diǎn) 5(加載指定的文件,自動加載類文件) */ /* * 包含并運(yùn)行指定文件,可以是絕對路徑也可以是相對路徑 * include 找不到的話則警告,然后繼續(xù)運(yùn)行(include_once: 在當(dāng)前文件中只 include 指定文件一次) * require 找不到的話則錯誤,然后終止運(yùn)行(require_once: 在當(dāng)前文件中只 require 指定文件一次) * include ''; * require ''; * include_once ''; * require_once ''; */ // 演示如何通過 __autoload 魔術(shù)辦法,來實(shí)現(xiàn)類的自動加載 function __autoload($class_name) { // 加載指定的文件 require_once $class_name . '.class.php'; } // 如果在當(dāng)前文件中找不到 MyClass 類,那么就會去調(diào)用 __autoload 魔術(shù)辦法 $obj = new MyClass(); echo $obj->name; echo "<br />"; class/MyClass.class.php <?php class MyClass { public $name = "webabcd"; }
4、類的相關(guān)知識點(diǎn) 6(命名空間)PHP教程
class/class6.php
PHP教程
<?php /** * 類的相關(guān)知識點(diǎn) 6(命名空間) */ // 以下代碼僅用于演示,實(shí)際項目中不建議在一個文件中定義多個 namespace // 如果當(dāng)前文件中只有一個命名空間,那么下面的這段可以省略掉命名空間的大括號,直接 namespace MyNamespace1; 即可 namespace MyNamespace1 { const MyConst = "MyNamespace1 MyConst"; function myFunction() { echo "MyNamespace1 myFunction"; echo "<br />"; } class MyClass { public function myMethod() { echo "MyNamespace1 MyClass myMethod"; echo "<br />"; } } } // 定義命名空間時,可以指定路徑 namespace Sub1\Sub2\MyNamespace2 { const MyConst = "MyNamespace2 MyConst"; function myFunction() { echo "MyNamespace2 myFunction"; echo "<br />"; } class MyClass { public function myMethod() { echo "MyNamespace2 MyClass myMethod"; echo "<br />"; } } } namespace MyNamespace3 { // 調(diào)用指定命名空間中的指定常量 echo \MyNamespace1\MyConst; echo "<br />"; // 調(diào)用指定命名空間中的指定函數(shù) \MyNamespace1\myFunction(); // 實(shí)例化指定命名空間中的類 $obj1 = new \MyNamespace1\MyClass(); $obj1->myMethod(); } namespace MyNamespace4 { // use 指定的命名空間 use \Sub1\Sub2\MyNamespace2; // 之后不用再寫全命名空間的路徑了,因?yàn)橹?use 過了 echo MyNamespace2\MyConst; echo "<br />"; MyNamespace2\myFunction(); $obj1 = new MyNamespace2\MyClass(); $obj1->myMethod(); } namespace MyNamespace5 { // use 指定的命名空間,并為其設(shè)置別名 use \Sub1\Sub2\MyNamespace2 as xxx; // 之后再調(diào)用命名空間時,可以使用其別名 echo xxx\MyConst; echo "<br />"; xxx\myFunction(); $obj1 = new xxx\MyClass(); $obj1->myMethod(); }
以上所述是小編給大家介紹的PHP動態(tài)地創(chuàng)建屬性和辦法, 對象的復(fù)制, 對象的比較, 加載指定的文件, 自動加載類文件, 命名空間 的相關(guān)介紹,希望對大家有所幫助!PHP教程
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/6768.html