<menu id="ycqsw"></menu><nav id="ycqsw"><code id="ycqsw"></code></nav>
<dd id="ycqsw"><menu id="ycqsw"></menu></dd>
  • <nav id="ycqsw"></nav>
    <menu id="ycqsw"><strong id="ycqsw"></strong></menu>
    <xmp id="ycqsw"><nav id="ycqsw"></nav>
  • php 面向對象知識點(php面向對象面試題)


    PHP中常用的關鍵字

    * final

    * 1. final不成修飾成員屬性(類中常不是用這個關鍵字)

    * 2. final只能修飾類和方法

    * 作用:

    * 使用final修飾的類 不 能被子類繼承

    * 使用final修飾的方法不能被子類去覆蓋

    *

    * 用來限制類不被繼承,方法不被覆蓋就使用fianl

    * static

    * 1. 使用static可以修飾成員屬性和成員方法,不能修飾類

    * 2. 用static修飾的成員屬性,可以被同一個類的所有對象共享

    *3. 靜態的數據是存在 內存中的 數據段中(初使化靜態段)

    *4. 靜態的數據是在類每一次加載時 分配到內存中的, 以后再用到類時就直接從數據段中獲取

    *5. 什么是類被加載? 只要在程序中使用到這個類(有這個類名出現)

    *

    *注意: 靜態的成員都要使用類名去訪問,不用創建對象, 不用對象去訪問

    *

    類名::靜態成員

    *如果在類中使用靜態成員, 可以使用 self代表本類($this)

    *6. 靜態方法(static修飾的方法), 不能訪問非靜態的成員(在非靜態的方法中,可以訪問靜態成員)

    *

    因為非靜態的成員, 就必須用對象來訪問,訪問內部的成員使用的就是$this

    靜態方法 不用使用對象來調用, 也就沒有對象, $this也就不能代表什么對象, 非靜態的成員還必須使用對象

    如果你確定一個方法不使用非靜態的成員, 則可以將這個方法聲明為 靜態方法(不能創建對象,直接使用類名就可以訪問)

    靜態成員: 類名::成員 , 在類內部訪問其它成員 self::成員

    const

    * 1. 他只能修飾成員屬性

    *define(‘HOST’, ‘www.xsphp.com’);

    *final int A=10;

    *2. 類中聲明常量屬性使用const

    *3. 命名的方式和我們以前學習 define是一樣的效果

    *4. 訪問方式和static靜態成員屬性是一樣(在類外部使用 類名::常量, 在類內部使用 self::常量)

    *5. 常量一定要在聲明時就給初值

    *$this self parent ….

    PHP中常用的魔術方法

    *__call()

    *作用: 在調用對象中不存在的方法時就會出現系統報錯,然后程序退出。

    *什么時候自動調用: 就會在調用一個對象中不存的的方法時自動調用

    *處理一些不存在方法的錯誤調用

    *這個方法需要兩個參數

    *__toString()

    *直接輸出對象引用時自動調用, 用來快速獲取對象的字符串表示的最便捷的方式

    __clone()

    *克隆對象使用clone去處理

    *原本 (原來的對象)

    *復本 (復制出來的對象)

    * __clone()就是在克隆對象時自動調用的方法

    * 只要一個對象一誕生,就要有初使化的動作, 和構造方法__construct作用相似

    * 在__clone()方法中的 $this關鍵字,代表的是復本, $that代表原本對象

    *__autoload()

    *注意: 其它的魔術方法都是在類中添加起作用, 這是一個唯一一個不在類中添加的方法

    *只要在頁面中使用到一個類,只要用到類名就會自動將類名傳給這個參數

    * 對象串行化(序列化): 將一個對象轉為二進制串 (對象是存儲在內存)

    * 1. 將對象長時間存儲在數據庫或文件中時

    * 2. 將對象在多個PHP文件中傳輸時

    *serialize() : 參數是一個對象, 返回來的就是串行化后的二進制串

    *unserialize() : 參數就是對象的二進制串, 返回來的就是新生成的對象

    * *__sleep()

    * 是在序列化時自動調用的方法

    *作用:就是可以將一個對象部分串行化

    *只要這個方法中返回一個數組,數組中有幾個成員屬性就序列化幾個成員屬性,如果不加這個方法,則所有成員都被序列化

    *__wakeup()

    *是在反序列化時自動調用的方法

    *也是對象重新誕生的一個過程(__construct(), __clone(),__wakeup())

      class Person {
    	var $name;
    	protected $age;
    	protected $sex;
    	static $country="中國";
    	const HOST="localhost";
    	function __construct($name, $age, $sex){
    		$this->name=$name;
    		$this->sex=$sex;
    		$this->age=$age;
    		echo "###################<br>";
    	}
    	function getCountry(){
    		return self::$country;
    	}
    	function setCountry($country){
    		self::$country=$country;
    	}
    	function say(){
    		echo "我的名-{$this->name}:,我的年齡:{$this->age},我的性別:{$this->sex}.<br>";
    	}
    	 function eat(){
    		echo "wwwwwwwwwwwwwwww";
    	 }
    	function __call($methodName, $args){
    		echo "你調用的方法{$methodName}(參數:";
    		print_r($args);
    		echo ")不存在<br>";
    	}
    	static function hello(){
    		echo "{$this->name} @@@@@@@@@@@@@@<br>";
    	}
    	function run(){
    		echo self::HOST;
    	}
    	function __toString(){
    		return "{$this->name}1234567898765432123567898765432";
    	}
    	function __clone(){
    		$this->name="復本 張三";
    		$this->age=0;
    	}
    	function __sleep(){
    		return array("name", "age");
    	}
    	function __wakeup(){
    		$this->name="sanzhang";
    		$this->age=$this->age+1;
    	}
    	function __destruct(){
    		echo $this->name."<br>";
    	}
      }
    

    版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

    發表評論

    登錄后才能評論
    国产精品区一区二区免费