【php面向对象中的魔术方法实例汇总】教程文章相关的互联网学习教程文章

PHP学习(二):PHP的魔术方法

PHP把所有以__(两个下划线)开头的类方法当成魔术方法。所以你定义自己的类方法时,不要以 __为前缀。 1、__construct() 当实例化一个对象的时候,这个对象的构造方法将首先被调用; 我们知道php5对象模型和类名相同的函数是类的构造函数,那么如果同时定义构造函数和__construc()方法的话,php5会默认调用__contruct()而不会调用同类名函数,所以__contruct()作为类的默认构造函数; header(content-type:text/html;ch...

怎么在子类用父类的魔术方法

父类:P class P{ private $name=""; function __construct(){ $this->name="hello"; } public function __set($name, $value){ $this->$name=$value; } public function showName(){ echo $this->name; }} 子类:C class C extends P{ function __construct(){ parent::__construct(); //想在这里给P类的$name换个值(你好)怎么做? } } ...

魔术方法set为何直接ECHO无效呢?

上面写着:: 当对不可访问属性调用 isset() 或 empty() 时,__isset() 会被调用。 在下面又写:: 在除 isset() 外的其它语言结构中无法使用重载的属性,这意味着当对一个重载的属性使用 empty() 时,重载魔术方法将不会被调用。 为避开此限制,必须将重载属性赋值到本地变量再使用 empty()。 自己测试empty有效. 求问手册上的这段话是什么意思>???????????????? 回复讨论(解决方案) 版主...

php魔术方法call

__call是魔术方法中的一个,当程序调用到当前类中未声明或没权限调用的方法时,就会调用__call方法 class test{ public function emptyFunc(){ $getArgs = func_get_args(); $funcName = $getArgs[0]; //$params = array_slice($getArgs, 1); //var_dump($params); // this is params return $funcName . function is not exists; } public function __call($m, $params) { $arr[] = $m...

php魔术方法简述

```name = $name; } public function getName() { return $this->name; } // 针对属性,设置值 public function __set($name, $value) { $this->$name = $value; } // 针对属性,读取值 public function __get($name) { if (isset($this->$name)) { return $this->$name; }else{ echo '尚未设置初始值'; } } // 针对方法,处理方法名和参数 public function __call($name, $arguments) { var_dump($arguments); return $name; } //...

php魔术方法sleep()wakeup()

__sleep() 和 __wakeup() public array __sleep ( void ) void __wakeup ( void ) serialize() 函数会检查类中是否存在一个魔术方法 __sleep()。如果存在,该方法会先被调用,然后才执行序列化操作。此功能可以用于清理对象,并返回一个包含对象中所有应被序列化的变量名称的数组。如果该方法未返回任何内容,则 NULL 被序列化,并产生一个 E_NOTICE 级别的错误。 示例: class user { public $name; p...

PHP:分享5个最近常用的魔术方法

1.__contruct() 如英文意思,就是构造函数。这个跟普通的构造函数的区别在于,不用每次都定义一个与类名同名的函数作为构造函数。 2.__call($funcName, $params) 是在实例调用类中未定的函数时触发的函数 class Model{ //$funcName: 未定义函数名 //$params(数组): 未定义函数的参数 __call($funcName, $params){ //我这里没有用到$params return "the function: $funcName is not exist!...

PHP魔术方法之call与callStatic方法

__call方法用于调用类中未定义的方法,__callStatic方法用于调用类中为调用的静态方法,两个函数都接受两个参数,第一个参数为函数名,第二个为传递的参数。与其他函数调用方式不同的是第一个参数的值会自动是调用的名字,第二个参数为数组传递过来的。 '; echo '还传了一个参数'; echo print_r($arg),''; } //魔术方法__callStatic public static function __callStatic($method,$arg){ echo '你想调用我...

拦截器interceptor(魔术方法)

拦截器可以拦截发送到未定义方法和属性的消息。 __get($property) ----访问未定义的属性时调用__set($property,$value) ----给未定义的属性赋值时被调用__isset($property) ----对未定义的属性调用isset()时被调用__unset($property) ----对未定义的属性调用unsettle()时调用__call($property) ----对未定义的方法时调用其实还有一个__callstatic ----对未定义的静态方法时调...

php魔术方法重载

重载 属性重载与方法重载 PHP所提供的"重载"(overloading)是指动态地"创建"类属性和方法。我们是通过魔术方法(magic methods)来实现的。 当调用当前环境下未定义或不可见的类属性或方法时,重载方法会被调用。 所有的重载方法都必须被声明为 public。 属性重载 public void __set ( string $name , mixed $value ) public mixed __get ( string $name ) public bool __isset ( string $nam...

php魔术方法debugInfo()

array __debugInfo ( void ) 该方法在var_dump()类对象的时候被调用,如果没有定义该方法,则var_dump会打印出所有的类属性 示例: class C { private $prop; public function __construct($val) { $this->prop = $val; } public function __debugInfo() { return [ propSquared => $this->prop ** 2, ]; }} var_dump(new C(42)); 结果 : object(C)#1 (1) { ["pr...

魔术方法_set()和_get()是不是一定要声明为public?解决方案

魔术方法__set()和__get()是不是一定要声明为public?魔术方法__set()和__get()是不是一定要声明为public?我的声明为private时,在类外面调用,浏览器提示为“要将__set()和__get()设为public”,可是很多资料书上都可以声明为private啊?------解决方案-------------------- 是的,一定要声明为public,只用这要,才能在外部访问很多资料书上都可以声明为private啊请永远的删除这些资料,因为他是在骗你! ------解决方案----------...

关于魔术方法_get,该如何解决

关于魔术方法__getclass A{ private $age=22; function __get($proName){ return $this->proName; }}$a=new A;var_dump($a->age);?>为何是null呢?哪里不对?------解决方案-------------------- return $this->$proName;

php的简略存在(魔术方法作用之一:容错)

php 的简单存在 (魔术方法作用之一:容错)<?php// 重载class Person{ //定义属性 public $name; private $age; //构造方法 public function __construct($name,$age){ $this->name =$name; $this->age =$age; } //获取魔术方法 # @param string $name public function __get($param){ // return $this->$param; #允许被访问的属性 $allow = array(age); if(in_array($param, $allow)){ return $this->$param; } } /...

如何在子类用父类的魔术方法

怎么在子类用父类的魔术方法本帖最后由 meenw 于 2014-07-29 12:47:44 编辑 父类:Pclass P{ private $name=""; function __construct(){ $this->name="hello"; } public function __set($name, $value){ $this->$name=$value; } public function showName(){ echo $this->name; }}子类:Cclass C extends P{ function __construct(){ ...

实例 - 相关标签