php构造函数魔术方法,php魔术方法

PHP把以__(两个下划线)开头的类方法当做魔术方法。所以,当定义类方法的时候,除了魔术方法,其他方法不建议以__为前缀。

1.__construct

__construct为php类的构造函数,当创建对象时,要先自动调用此方法,非常适合做一些初始化操作。

2.__destruct

__destruct为析构函数,当对象内部的操作执行完毕后,会自动调用此函数,释放内存。此外还有个规则就是后进先出,即后创建的对象先被释放。

3.__toString

此函数的原型public string __toString(void),当对象像字符串一样被处理时,将自动调用此函数,如echo $obj,$obj为对象。

4.__call

函数原型public mixed __call(string $name, array $arguments),当对象调用不存在的函数时,将调用此函数,不存在的函数名将作为第一个参数传给__call,传给不存在函数的参数将以数组的形式作为第二个参数传给__call.

5.__callStatic

函数原型public static mixed __callStatic(string $name, array $arguments),此函数和__call类似,只是在调用不存在的静态方法时,会自动调用此函数。

6.__clone

函数原型void __clone(void),当对象复制通过clone关键字来完成时,类中的__clone方法将自动被调用,在此方法中可以对新生成的对象的属性等进行重新设置,以此方法完成的复制,在内存中会有两个对象,彼此不互相影响。

7.__autoload

这个方法主要是自动载入类文件,例如

function __autoload($class_test){

include($class_test.".php");//根据自己实际情况定

}

这个方法不是定义在类内部的。

8.__set和__get

函数原型public void __set(string $name, mixed $value),比如说,我们在类中定义了一个私有的属性,我们在类外部是不能访问他的值和设置他的值的,如果想用对象访问他,就可以利用__set方法和下面讨论的__get方法。当对象操作不可访问的属性时,将自动调用__set方法和__get方法。

__get原型public mixed __get(string $name)

下面是测试的例子

function __autoload($class_name){

include($class_name . ".php");

}

class  MyPc{

public $name = "thinkphp";

public $age;

protected $city = "changchun";

private $tmp;

function __construct(){//构造函数

$this->age = 24;

}

function __destruct(){//析构函数

}

function __toString(){

return "__toString is tested!!";

}

function __call($name, $arguments){//对象调用不存在的函数时调用

echo "the " . $name . implode(",", $arguments) . "\n";

}

static function __callStatic($name, $arguments){//调用不存在的静态方法时调用

echo "the " . $name . implode(",", $arguments) . "\n";

}

function __clone(){//克隆

$this->name = "ci";

}

function __set($var, $value){

$this->$var = $value;

}

function __get($arg){

echo $this->$arg;

}

}

$pc = new MyPc();

echo $pc->age . "\n";//__construct test

echo $pc . "\n" ;//__toString test

$pc->test("call test");//__call test

MyPc::good("lala");//__callStatic test

$pc1 = clone $pc;//__clone test

echo $pc1->name . "\n";

$pc->tmp = "private field";

echo $pc->tmp . "\n";

echo $pc->city;

//测试__autoload方法,要重新写个php类文件

$test = new Good();

echo $test->name;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值