一、创建实例
- 必须用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;//换行符,会根据对应系统进行换行