PHP 類和對象 —— new創建對象

一、創建實例

  1. 必須用new創建類的實例
  2. 類應該被實例化之前被定義
  3. 創建新對象時該對象總是被賦值,除非該對象定義了構造函數並且在出錯時拋出一個異常
  4. new之後跟着的是一個包含有類名的字符串string,則該類的實例被創建。如果該類屬於一個命名空間,則必須用其完整名稱。
//直接new一個對象
$instance = new PhoneClass();
//將字符串賦值給變量
$phoneClass = 'PhoneClass';
$instance = new $phoneClass();//PhoneClass()

二、對象賦值

  1. 在類內部定義中,可以用new self和new parent創建新對象。
  		$instance = new UserController();
        $assigned = $instance;
        $reference = & $instance;//$referece 引用的是$instance這個對象

        $instance->var ='$assigned will have this value';
        $instance = null;//$instance和 $reference 都會變成null
		
		$self = new Self();//創建自身類的對象,我這裏是在PhoneController類中定義的。
        $parent = new Parent();//創建父類的對象,因爲PhoneController繼承基類Controller。

        dump($instance);
        dump($reference);
        dump($assigned);

		dump($self);
        dump($parent);

輸出結果爲:

null
null
App\Http\Controllers\UserController {#321 ▼
  #middleware: []
  +"var": "$assigned will have this value"
}
//自身類
App\Http\Controllers\PhoneController {#320 ▼
  #middleware: []
}
//父類
App\Http\Controllers\Controller {#322 ▼
  #middleware: []
}

三、創建新對象

Class Phone{
	static public function getNew(){
		//new static 返回的是調用者的實例,比如繼承的時候子類Meizu調用父類Phone的getNew方法返回的就是Meizu的實例,而不是Phone的實例
		return new static;
	}
}

Class Meizu extends Phone{
}

$phone = new Phone();
$mobile = new $phone;	

var_dump($phone !== $mobile);

$phone1 = Phone::getNew();	
//instanceof用於確定一個變量是否屬於一個類的實例,比如變量$phone是否是Phone類的一個實例,是返回true,否返回false
var_dump($phone1 instanceof Phone);

$meizu = Meizu::getNew();
var_dump($meizu instanceof Meizu);

輸出結果如下

true
true
true

四、訪問新創建對象的成員
1、可以通過表達式訪問

echo (new Phone())->name;//  -> 向右箭頭符號爲對象運算符

五、屬性訪問和方法調用

class Phone {
	public $name = '屬性';
	public function name(){
		return '方法';
	}
}
$phone = new Phone();
echo $phone->name; //訪問name屬性
echo $phone->name(); //調用name方法
PHP_EOL;//換行符,會根據對應系統進行換行
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章