指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub

在对象中调用一个不可访问的方法时,__call() 会被调用。它是 PHP 魔术方法 中的一种。

语法: __call ( string $name , array $arguments )

$name 参数是要调用的方法名称。 $arguments 参数是一个枚举数组,包含着要传递给方法 $name 的参数。

调用受限方法: 如果一个类没有设置 __call() ,对象无法调用受限方法。

class Person
{
    protected function eat($arg)
    {}
}

当对象调用受限方法时,会出现以下错误信息:
$person = new Person();

//error: Uncaught Error: Call to protected method Person::eat()
$person->eat('milk');

设置魔术方法 __call():
class Person
{
    protected function eat($args)
    {
        foreach ($args as $arg) {
            echo 'Do you like eating, ' . $arg . '?<br />';
        }
    }

    public function __call($name, $arguments)
    {
        // 如果类中有这个方法,就调用
        if ($name === 'eat') {
            $this->run($arguments);
        } else {
            echo 'Calling unavailable function ' . $name . '().<br />';
        }
    }
}

$person = new Person();

// Do you like eating, Jack?
// Do you like eating, Rose?
$person->eat('Jack', 'Rose');


调用不存在的方法,给出调用无效方法的信息提示:
//Calling unavailable function drink().
$person->drink('Jack', 'Rose');