PHP 将所有以 __(两个下划线)开头的类方法保留为魔术方法。所以在定义类方法时,除了上述魔术方法,建议不要以 __ 为前缀。
__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo() 等方法在 PHP 中被称为"魔术方法"(Magic methods)。
在命名自己的类方法时不能使用这些方法名,除非是想使用其魔术功能。
我们暂可以理解为,魔术方法就是一种实例化之后,不需要手动调用就能够执行的方法。
__construct() 构造函数
PHP 5 允许开发者在一个类中定义一个方法作为构造函数。
具有构造函数的类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。
接着上一期《PHP丨类与对象》中的代码:
class name{
public $s1 = 0;
public $s2 = 1;
public function __construct(){//构造函数
echo 123;//输出
}
public function s1(){
$this->s2();
}
public function s2(){
echo 's2';
}
}
$name = new name();//①实例化类得到$name对象
?>
浏览器输出效果:
实例化类的同时传参数
代码:
class name{
public $s1 = 0;
public $s2 = 1;
public function __construct($a, $b){//③构造方法定义、接收参数
var_dump( $a, $b );//输出
}
public function s1(){
$this->s2();
}
public function s2(){
echo 's2';
}
}
$name = new name('a', 'b');//②实例化同时传递参数a与b
?>
浏览器输出效果:
传参后把结果赋给两个类属性
class name{
public $s1 = 0;
public $s2 = 1;
public function __construct( $a, $b ){
$this->s1 = $a;//④将上一行代码$a接收的值赋给s1属性
$this->s2 = $b; //④将上一行代码$2接收的值赋给s2属性
}
public function s1(){//⑥执行s1方法
$this->s2();//⑦通过this语法调用s2方法
}
public function s2(){
echo $this->s1;//⑧在s2内部输出s1属性
}
}
$name = new name( 'a', 'b' );
$name->s1();//⑤调用s1的方法
?>
浏览器输出效果:
构造方法只是魔术方法的一种。
魔术方法都是在特定条件下能够自动执行的一种方法。
其它魔术方法大家可以参考官方手册:【PHP 手册】-【语言参考】-【类与对象】-【魔术方法】This is not the end.It is not even the beginning of the end.But it is,perhaps,the end of the beginning.
更多分享三小时学会 HTML 网页编辑