关于PHP的拦截器运用
程序员文章站
2022-05-23 13:53:23
...
关于PHP的拦截器使用
成考终于结束了,又可以安心下来看看代码的书
好吧,继续学习PHP
php提供了内置的拦截器,可以拦截发送到一些未定义的方法和属性消息
先看下__get($property),它主要访问未定义的属性时被调用
看下示例:
class Coder{
function __get($property){
$method = "get{$property}";
if(method_exists($this,$method)){
return $this->$method();
}
}
function getName(){
return "SUN";
}
}
$coder = new Coder();
print $coder->name;
程序执行后会输出SUN,如果程序里没有这个方法,就会什么也不做,会被解析成NULL
类似的方法还有__set(),__isset,__unset
下面主要来看下__call()这个方法,它是调用未定义的方法时被调用,有两个参数
1.$method, 这个是方法的名称;
2.$arg_array,是传递给要调用方法的所有参数(数组)
__call()方法对于实现委托的示例
class CoderWrite{
function printName(Coder $c){
print $c->getName();
}
}
class Coder{
private $write;
function __construct(CoderWrite $cw){
$this->write=$cw;
}
function __call($methodname,$args){
if(method_exists($this->write,$methodname)){
return $this->write->$methodname($this);
}
}
function getName(){
return "SUN";
}
}
调用:$coder = new Coder(new CoderWrite());
$coder->printName();
_call()方法会被调用,然后查找CoderWrite对象中有没有printName()方法,有的话就会调用。呵呵,是不是变相的给Coder对象增加了一个方法?
成考终于结束了,又可以安心下来看看代码的书
好吧,继续学习PHP
php提供了内置的拦截器,可以拦截发送到一些未定义的方法和属性消息
先看下__get($property),它主要访问未定义的属性时被调用
看下示例:
class Coder{
function __get($property){
$method = "get{$property}";
if(method_exists($this,$method)){
return $this->$method();
}
}
function getName(){
return "SUN";
}
}
$coder = new Coder();
print $coder->name;
程序执行后会输出SUN,如果程序里没有这个方法,就会什么也不做,会被解析成NULL
类似的方法还有__set(),__isset,__unset
下面主要来看下__call()这个方法,它是调用未定义的方法时被调用,有两个参数
1.$method, 这个是方法的名称;
2.$arg_array,是传递给要调用方法的所有参数(数组)
__call()方法对于实现委托的示例
class CoderWrite{
function printName(Coder $c){
print $c->getName();
}
}
class Coder{
private $write;
function __construct(CoderWrite $cw){
$this->write=$cw;
}
function __call($methodname,$args){
if(method_exists($this->write,$methodname)){
return $this->write->$methodname($this);
}
}
function getName(){
return "SUN";
}
}
调用:$coder = new Coder(new CoderWrite());
$coder->printName();
_call()方法会被调用,然后查找CoderWrite对象中有没有printName()方法,有的话就会调用。呵呵,是不是变相的给Coder对象增加了一个方法?
相关文章
相关视频
上一篇: 正则问题 将图片宽度替换为100%
下一篇: PHP吉祥物“皮皮”的制作_PHP
推荐阅读
-
php下关于Cannot use a scalar value as an array的解决办法
-
关于PHP虚拟主机概念及如何选择稳定的PHP虚拟主机
-
关于php unset对json_encode的影响详解
-
PHP关于IE下的iframe跨域导致session丢失问题解决方法
-
关于php程序报date()警告的处理(date_default_timezone_set)
-
php面试中关于面向对象的相关问题
-
php类中的各种拦截器用法分析
-
关于php支持的协议与封装协议总结(推荐)
-
关于基于nginx+php组建的网站上传图片漏洞的修补方法
-
详解关于php的xdebug配置(编辑器vscode)