php魔术方法小结1
php中除了有大量的魔术变量外,还有很多_开头的魔术方法,本文简单小结下:
1 _construct 和_destruct就不说了,构造和析构.
2 _call和_callstatic
例子:
showvalue();
?>
这里会说出错,那当然的,没定义.可以用
class greetings {
function __call( $functionname, $argumentsarray ) {
echo hello, . ucfirst( $functionname ) . !!!;
}
}
$sayhello = new greetings();
_call会在调用没有定义任何方法时触发
还有_callstatic
undefineddatamember;
?>
这个是直接输出了没定义的值,不大好,可以改成这样,强制性地:
adata['username'] = '木目子';
$ouserinfo2->adata['password'] = '123456';
$ouserinfo2->adata['birthdat'] = '1978-08-16';
echo 用户名:.$ouserinfo2->adata['username'] .
\n;
echo 密 码:.$ouserinfo2->adata['password'] .
\n;
echo 生 日:.$ouserinfo2->adata['birthday'] .
\n;
显然,这段代码会出错的,因为adata是userinfo的私有属性,不能直接在外部使用,那现在问题是必须要给adata进行付值,这个时候__set和__get就排上用场了:
class userinfo3{
//private $adata = array();
private $adata = array();
function __set($property,$value){
$this->adata[$property] = $value;
}
function __get($property){
return $this->adata[$property];
}
}
$ouserinfo3 = new userinfo3;
$ouserinfo3->adata['username'] = '木目子';
$ouserinfo3->adata['password'] = '123456';
$ouserinfo3->adata['birthdat'] = '1978-08-16';
echo 用户名:.$ouserinfo3->adata['username'] .
\n;
echo 密 码:.$ouserinfo3->adata['password'] .
\n;
echo 生 日:.$ouserinfo3->adata['birthday'] .
\n;
$classobj = new myclass();
$classobj->undefineddatamember = 'some value';
echo $classobj->undefineddatamember;
?>
这样当调用的时候,就强制报错了
4) _invoke
把对象当函数用,典型的例子为,平常我们一般这样用:
getusers();
foreach( $users as $user ) {
echo $user[ 'username' ] . '
';
}
?>
现在可以这样用: