PHP -- 方法和数组式访问

1. 方法

1.1 魔术方法

针对属性的
__get()、__set()、__isset()、__unset()
class A
{
    public $i = '这是i';

    public function __get($name){
        return "你这在访问{$name}的属性";
    }
}
/* 当属性找不到会调用__get方法
 * */
$a = new A();
echo $a -> qweqwe;
针对方法的
__call()、__callStatic()
class A
{
    public $i = '这是i';

    /* true 不输出,直接给返回值
     * */
    public function __call($name, $arguments)
    {
        return "你正在调用:{$name}方法,参数为:".var_export($arguments,true);
    }
}
/* 当属性找不到会调用__get方法
 * 当方法找不到会调用__call方法(实例化方法)
 * 静态方法是__callStatic()
 * */
$a = new A();

echo $a ->fn('测试1','test_2');

__toString()
Java和js中是继承,通过重写。php是魔术方法

7.2 回调

call_user_func、call_user_func_array
function fn($i=5,$j=2){
    echo "Hello world{$i},{$j}";
}

$v = 'fn';
/* 相当于js中的call
 * */
call_user_func($v, 3000);

/* 动态调用,传入args,相当于js中的apply
 * */
$arg = array('test_1', 'test_2');
call_user_func_array($v,$arg);

2. 数组式访问

class A implements ArrayAccess{

    public function offsetExists($offset)
    {
    }

    public function offsetGet($offset)
    {
        return $this->$offset;
    }

    public function offsetSet($offset, $value)
    {
    }

    public function offsetUnset($offset)
    {
    }
}

$a = new A();

$name = 'i';

$a->$name =5;

echo $a['i'];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值