php类知识---魔术方法__toString,__call,__debugInfo

<?php

class mycoach{    public function __construct($name,$age)    {        $this->name = $name;        $this->age = $age;        echo "upon melancholy hill"."\n";    }

    public function __toString()    {        #echo时触发,返回一个字符串        return "working hard and party with cpc and cj"."\n";    }

    public function __debugInfo()    {        #一个诡异的方法,解析一个并不存在的函数,以及它其中的数组,返回一个数组        #该方法必须有两个参数        #var_dump()方法触发        return [‘name‘=>$this->name,‘age‘=>$this->age];    }

    public function __call($funcname,$myvals)    {        #触发时机,当对象调用一个并不存在的方法时        #第一个参数为函数名,第二个为函数的参数---以数组的形式组成        var_dump($funcname,$myvals);    }

}

$cpc = new mycoach(‘陈培昌‘,21);echo $cpc;$cpc->wenheiwa();$cpc->saiwa(["0"=>["name"=>"cpc","age"=>22],"1"=>["name"=>"cj","age"=>20]]);

输出结果:

upon melancholy hill     #实例化时调用了__construct()方法
working hard and party with cpc and cj   #打印对象时调用了__toString方法
string(8) "wenheiwa"  #对象调用了不存在的方法wenheiwa()执行了__call方法,由于函数没有参数,因此打印空
array(0) {
}
string(5) "saiwa"    #对象调用了不存在的方法saiwa()执行了__call方法,由于函数有参数,因此打印参数----其形式为数组
array(1) {
  [0]=>
  array(2) {
    [0]=>
    array(2) {
      ["name"]=>
      string(3) "cpc"
      ["age"]=>
      int(22)
    }
    [1]=>
    array(2) {
      ["name"]=>
      string(2) "cj"
      ["age"]=>
      int(20)
    }
  }
}

原文地址:https://www.cnblogs.com/saintdingspage/p/10960757.html

时间: 2024-11-02 23:52:36

php类知识---魔术方法__toString,__call,__debugInfo的相关文章

PHP面向对象魔术方法之__call函数

l 基本介绍: (1) 当我们调了一个不可以访问的成员方法时,__call魔术方法就会被调用. (2) 不可以访问的成员方法的是指(1. 该成员方法不存在, 2. 成员方法是protected或者 private) l 需求 我们就是希望,在类的外部直接调用不可访问的成员方法(private , protected). l 案例说明 <?php header('content-type:text/html;charset=utf-8'); //__call魔术方法 class Monk{ pub

静态、抽象类、加载类、魔术方法等

静态  static关键字 普通成员普通成员是属于对象的 静态成员静态成员是属于类的 普通方法里面可以调用静态成员静态方法里面不能调用普通成员self关键字 在类里面代表该类 普通类 class Ren { public $name="张三"; public static $zhongzu; //静态成员 普通方法 function Say() { echo self::$zhongzu."你好"; } 静态类 static function Run() { ech

PHP魔术方法之__call与__callStatic方法

//魔术方法__call /* $method 获得方法名 $arg 获得方法的参数集合 */ class Human { private function t(){ } public function __call($method,$arg){ echo '你想调用我不存在的方法',$method,'方法<br/>'; echo '还传了一个参数<br/>'; echo print_r($arg),'<br/>'; } public static function _

PHP常用魔术方法(__call魔术方法:)

魔术方法  __call <?php //文件名:index.php define('a',__DIR__); include '/IMooc/Loader.php'; spl_autoload_register('\\IMooc\\Loader::autoload'); $Object = new \IMooc\Object(); echo $Object->test("哎哟喂",123);//在调用test不存在的方法时,会自动调用__call方法 /*输出: stri

Python 类的魔术方法

Python中类的魔术方法 在Python中以两个下划线开头的方法,__init__.__str__.__doc__.__new__等,被称为"魔术方法"(Magic methods).魔术方法在类或对象的某些事件出发后会自动执行,如果希望根据自己的程序定制自己特殊功能的类,那么就需要对这些方法进行重写. 注意:Python 将所有以 __(两个下划线)开头的类方法保留为魔术方法.所以在定义类方法时,除了上述魔术方法,建议不要以 __ 为前缀. Python提供的魔术方法 魔术方法这里

魔术方法之__call与__callStatic方法

<?php class human{ private function t(){ } /** * 魔术方法__call * * @param string $method 获得方法名 * @param string $arg 获得方法的参数集合 */ public function __call($method, $params){ echo '你想调用我不存在的方法', $method, '方法'; echo '还传了一个参数'; print_r($params); } //魔术方法__cal

魔术方法 __tostring __debugInfo __call

__tostring 触发时机:echo 一个对象的时候触发 该函数需要return一个字符串 __debugInfo 触发时机:var_dump 一个对象的时候触发 该函数需要return 一个数组 __call    触发时机:当调用一个不存在对象方法的时候触发 参数一:函数名 参数二:是一个数组,函数中的参数都被存放到这个数组中 <?php class Person{ public $name; public $age; public $height; public function __

面向对象【十三】类的魔术方法

一. __getattribute__ class Foo: def __init__(self,x): self.x=x def __getattr__(self, item): print('执行的是我') # return self.__dict__[item] f1=Foo(10) print(f1.x) f1.xxxxxx #不存在的属性访问,触发__getattr__ 回顾__getattr__ 回顾__getattr__ class Foo: def __init__(self,x

PHP类知识----clone方法上机实验

<?php class mycoach { public function __construct($name,$age) { $this->name = $name; $this->age = $age; } } $cpc = new mycoach("陈培昌",22); $cj = $cpc; var_dump($cj,$cpc); $cj2 = clone $cpc; var_dump($cj2,$cpc); ?> 原文地址:https://www.cnb