PHP動(dòng)態(tài)地創(chuàng)建屬性和方法, 對(duì)象的復(fù)制, 對(duì)象的比較,加載指定的文件,自動(dòng)加載類文件,命名空間
PHP前言:
•動(dòng)態(tài)地創(chuàng)建屬性和方法
•對(duì)象的復(fù)制
•對(duì)象的比較
•加載指定的文件
•自動(dòng)加載類文件
•命名空間
示例
1、類的相關(guān)知識(shí)點(diǎn) 3(動(dòng)態(tài)地創(chuàng)建屬性和方法)
class/class3.php
<?php /** * 類的相關(guān)知識(shí)點(diǎn) 3(動(dòng)態(tài)地創(chuàng)建屬性和方法) */ // 用于演示如何動(dòng)態(tài)地創(chuàng)建屬性(這就是 php 中所謂的重載) class Class1 { // __set 魔術(shù)方法,當(dāng)設(shè)置的屬性不存在或者不可訪問(private)時(shí)就會(huì)調(diào)用此函數(shù) public function __set($name, $value) { echo "__set \$name: {$name}, \$value: {$value}"; echo "<br />"; } // __get 魔術(shù)方法,當(dāng)獲取的屬性不存在或者不可訪問(private)時(shí)就會(huì)調(diào)用此函數(shù) public function __get($name) { echo "__get \$name: {$name}"; echo "<br />"; return 999; } } $objClass1 = new Class1(); // 當(dāng)你設(shè)置的屬性不存在或者不可訪問(private)時(shí),就會(huì)調(diào)用對(duì)應(yīng)的 __set 魔術(shù)方法 $objClass1->property1 = wanglei; // 不可訪問的如 private ,或者不存在的 // 當(dāng)你獲取的屬性不存在或者不可訪問(private)時(shí),就會(huì)調(diào)用對(duì)應(yīng)的 __get 魔術(shù)方法 echo $objClass1->property2; echo "<br />"; // 用于演示如何動(dòng)態(tài)地創(chuàng)建方法(這就是 php 中所謂的重載) class Class2 { // __call 魔術(shù)方法,當(dāng)調(diào)用的實(shí)例方法不存在或者不可訪問(private)時(shí)就會(huì)調(diào)用此函數(shù) public function __call($name, $arguments) { echo "__call \$name: {$name}, \$arguments: " . implode(', ', $arguments); echo "<br />"; } // __callStatic 魔術(shù)方法,當(dāng)調(diào)用的類方法不存在或者不可訪問(private)時(shí)就會(huì)調(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)時(shí),就會(huì)調(diào)用對(duì)應(yīng)的 __call 魔術(shù)方法 echo $objClass2->method1("aaa", "bbb"); // 當(dāng)你調(diào)用的類方法不存在或者不可訪問(private)時(shí),就會(huì)調(diào)用對(duì)應(yīng)的 __callStatic 魔術(shù)方法 echo Class2::method2("aaa", "bbb");
2、類的相關(guān)知識(shí)點(diǎn) 4(對(duì)象的復(fù)制,對(duì)象的比較)
class/class4.php
<?php /** * 類的相關(guān)知識(shí)點(diǎn) 4(對(duì)象的復(fù)制,對(duì)象的比較) */ // 用于演示如何復(fù)制對(duì)象 class Class1 { public $field1 = "field1"; public $field2 = "field2"; // 通過 clone 復(fù)制對(duì)象時(shí),會(huì)調(diào)用此魔術(shù)方法 function __clone() { echo "__clone"; echo "<br />"; } } $objClass1 = new Class1(); // 通過 clone 復(fù)制對(duì)象,會(huì)調(diào)用 __clone 魔術(shù)方法 $objClass2 = clone $objClass1; // 通過 clone 復(fù)制的對(duì)象為淺拷貝(shallow copy),即成員數(shù)據(jù)之間的一一賦值, 而所有的引用屬性仍然會(huì)是一個(gè)指向原來的變量的引用(如果要做 deep copy 則需要自己寫) echo $objClass2->field1; // output: field1 echo "<br />"; echo $objClass2->field2; // output: field2 echo "<br />"; // 如果兩個(gè)對(duì)象的屬性和屬性值都相等,則他們“==”相等, if ($objClass1 == $objClass2) { echo '$objClass1 == $objClass2'; echo "<br />"; } // 如果兩個(gè)對(duì)象的屬性和屬性值都相等,但不是同一個(gè)類的實(shí)例,則他們“===”不相等 if ($objClass1 !== $objClass2) { echo '$objClass1 !== $objClass2'; echo "<br />"; } // 如果兩個(gè)對(duì)象是同一個(gè)類的實(shí)例,則他們“===”相等 if ($objClass1 === $objClass1) { echo '$objClass1 === $objClass1'; echo "<br />"; } // 如果兩個(gè)對(duì)象是同一個(gè)類的實(shí)例,則他們“===”相等 $objClass3 = &$objClass1; if ($objClass1 === $objClass3) { echo '$objClass1 === $objClass3'; echo "<br />"; }
3、類的相關(guān)知識(shí)點(diǎn) 5(加載指定的文件,自動(dòng)加載類文件)
class/class5.php
<?php /** * 類的相關(guān)知識(shí)點(diǎn) 5(加載指定的文件,自動(dòng)加載類文件) */ /* * 包含并運(yùn)行指定文件,可以是絕對(duì)路徑也可以是相對(duì)路徑 * include 找不到的話則警告,然后繼續(xù)運(yùn)行(include_once: 在當(dāng)前文件中只 include 指定文件一次) * require 找不到的話則錯(cuò)誤,然后終止運(yùn)行(require_once: 在當(dāng)前文件中只 require 指定文件一次) * include ''; * require ''; * include_once ''; * require_once ''; */ // 演示如何通過 __autoload 魔術(shù)方法,來實(shí)現(xiàn)類的自動(dòng)加載 function __autoload($class_name) { // 加載指定的文件 require_once $class_name . '.class.php'; } // 如果在當(dāng)前文件中找不到 MyClass 類,那么就會(huì)去調(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)知識(shí)點(diǎn) 6(命名空間)
class/class6.php
<?php /** * 類的相關(guān)知識(shí)點(diǎn) 6(命名空間) */ // 以下代碼僅用于演示,實(shí)際項(xiàng)目中不建議在一個(gè)文件中定義多個(gè) namespace // 如果當(dāng)前文件中只有一個(gè)命名空間,那么下面的這段可以省略掉命名空間的大括號(hào),直接 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 />"; } } } // 定義命名空間時(shí),可以指定路徑 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)用命名空間時(shí),可以使用其別名 echo xxx\MyConst; echo "<br />"; xxx\myFunction(); $obj1 = new xxx\MyClass(); $obj1->myMethod(); }
以上所述是小編給大家介紹的PHP動(dòng)態(tài)地創(chuàng)建屬性和方法, 對(duì)象的復(fù)制, 對(duì)象的比較, 加載指定的文件, 自動(dòng)加載類文件, 命名空間 的相關(guān)介紹,希望對(duì)大家有所幫助!
- PHP命名空間和自動(dòng)加載類
- PHP自動(dòng)加載autoload和命名空間的應(yīng)用小結(jié)
- PHP命名空間與自動(dòng)加載類詳解
- php的命名空間與自動(dòng)加載實(shí)現(xiàn)方法
- PHP面向?qū)ο蟪绦蛟O(shè)計(jì)之命名空間與自動(dòng)加載類詳解
- PHP命名空間與自動(dòng)加載機(jī)制的基礎(chǔ)介紹
- PHP命名空間(Namespace)的使用詳解
- PHP命名空間(namespace)的動(dòng)態(tài)訪問及使用技巧
- php自動(dòng)加載的兩種實(shí)現(xiàn)方法
- PHP 命名空間和自動(dòng)加載原理與用法實(shí)例分析
相關(guān)文章
2個(gè)比較經(jīng)典的PHP加密解密函數(shù)分享
這篇文章主要介紹了2個(gè)比較經(jīng)典的PHP加密解密函數(shù)分享,一個(gè)是Discuz!的authcode加密函數(shù)(帶詳細(xì)分解),一個(gè)是encrypt()函數(shù),都比較經(jīng)典,需要的朋友可以參考下2014-07-07PHP根據(jù)session與cookie用戶登錄狀態(tài)操作類的代碼
這篇文章主要介紹了PHP根據(jù)session與cookie用戶登錄狀態(tài)操作類的相關(guān)資料,非常具有參考借鑒價(jià)值,需要的朋友可以參考下2016-05-05php使用Swoole實(shí)現(xiàn)毫秒級(jí)定時(shí)任務(wù)的方法
這篇文章主要介紹了php使用Swoole實(shí)現(xiàn)毫秒級(jí)定時(shí)任務(wù)的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09微信營(yíng)銷平臺(tái)系統(tǒng)–刮刮樂的開發(fā)
最近一直在做微信相關(guān)的開發(fā)工作,刮刮樂是一個(gè)最常見的微信應(yīng)用了,網(wǎng)上也有很多的教程,本來是不想寫這篇博文的,但又怕網(wǎng)友被坑,我還是寫一下。2014-06-06在WordPress中使用wp-cron插件來設(shè)置定時(shí)任務(wù)
這篇文章主要介紹了在WordPress中使用wp-cron插件來設(shè)置定時(shí)任務(wù)的方法,文中給出了幾個(gè)常用的相關(guān)PHP函數(shù)和參數(shù),需要的朋友可以參考下2015-12-12thinkphp3.2中Lite文件替換框架入口文件或應(yīng)用入口文件的方法
這篇文章主要介紹了thinkphp3.2中Lite文件替換框架入口文件或應(yīng)用入口文件的方法,涉及ThinkPHP相關(guān)配置技巧,需要的朋友可以參考下2015-05-05yii2實(shí)現(xiàn)分頁(yè),帶搜索的分頁(yè)功能示例
本篇文章主要介紹了yii2實(shí)現(xiàn)分頁(yè),帶搜索的分頁(yè)功能示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-01-01Yii1.0 不同頁(yè)面多個(gè)驗(yàn)證碼的使用實(shí)現(xiàn)
這篇文章主要介紹了Yii1.0 不同頁(yè)面多個(gè)驗(yàn)證碼的使用實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03- 生成唯一ID的應(yīng)用場(chǎng)景非常普遍,如臨時(shí)緩存文件名稱,臨時(shí)變量,臨時(shí)安全碼等,uniqid()函數(shù)基于以微秒計(jì)的當(dāng)前時(shí)間,生成一個(gè)唯一的 ID。由于生成唯一ID與微秒時(shí)間關(guān)聯(lián),因此ID的唯一性非??煽?/div> 2015-11-11
最新評(píng)論