一、創建實例
- 必須用new創建類的實例
- 類應該被實例化之前被定義
- 創建新對象時該對象總是被賦值,除非該對象定義了構造函數並且在出錯時拋出一個異常
- new之後跟着的是一個包含有類名的字符串string,則該類的實例被創建。如果該類屬於一個命名空間,則必須用其完整名稱。
//直接new一個對象
$instance = new PhoneClass();
//將字符串賦值給變量
$phoneClass = 'PhoneClass';
$instance = new $phoneClass();//PhoneClass()
二、對象賦值
- 在類內部定義中,可以用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;//換行符,會根據對應系統進行換行