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>";
	}
  }

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/268334.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-16 13:08
下一篇 2024-12-16 13:09

相關推薦

發表回復

登錄後才能評論