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