导航:首页 > 编程语言 > php类魔术方法

php类魔术方法

发布时间:2022-11-13 08:35:45

php魔术方法__GET、__SET使用实例

__get()-
读取不可访问属性的值时,__get()
会被调用。
__set()-
在给不可访问属性赋值时,__set()
会被调用。
复制代码
代码如下:
<?php
/**
*
清晰的认识__get()
__set()
*/
class
Example
{

//公有的属性

public
$public
=
'pub'
;

//受保护的
-
子类中该属性可用

protected
$protected
=
'pro';

//私有的
-
只能此类使用此属性

private
$private
=
'pri';

//当访问对象中的属性不存在或者非公有属性的时候自动加载__get()方法

public
function
__get($name){

return
'调用__get()方法:'.$name;

}

//当给对象的一个属性赋值的时候如果该属性不存在或者是非公有属性则自动加载__set()方法

public
function
__set($name,$value){

echo
"\nname:".$name.',value:'.$value."\n";

}
}
$example
=
new
Example;
echo
'<pre>';
echo
$example->public."\n";
echo
$example->protected."\n";
echo
$example->private."\n";
echo
$example->other."\n";
echo
'<hr>';
$example->public
=
'lic';
//这个赋值成功所有没有显示
$example->protected
=
'tec';
$example->private
=
'vat';
$example->other
=
'er';
echo
'<br/>';
echo
'打印
public
属性:'.$example->public;

② php中常用的魔术方法有哪些

php规定以两个下划线__开头的方法都保留为魔术方法,建议自定义函数的函数名最好避开。
__construct() 实例化类时自动调用。
__destruct() 类对象使用结束时自动调用。
__set() 在给未定义的属性赋值的时候调用。
__get() 调用未定义的属性时候调用。
__isset() 使用isset()或empty()函数时候会调用。
__unset() 使用unset()时候会调用。
__sleep() 使用serialize序列化时候调用。
__wakeup() 使用unserialize反序列化的时候调用。
__call() 调用一个不存在的方法的时候调用。
__callStatic()调用一个不存在的静态方法是调用。
__toString() 把对象转换成字符串的时候会调用。比如 echo。
__invoke() 当尝试把对象当方法调用时调用。
__set_state() 当使用var_export()函数时候调用。接受一个数组参数。
__clone() 当使用clone复制一个对象时候调用。

③ php魔术方法怎么用

在 PHP 里,将所有以 __(两个下划线)开头的类方法保留为魔术方法。魔术方法的引入是对面向对象编程思想的进一步实现,重载就是通过魔术方法来实现的。主要有:
__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(),__sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo() 等函数。

④ 详解php的魔术方法__get()和__set()使用介绍

先看看php官方文档的解释:
__set()
is
run
when
writing
data
to
inaccessible
properties.
__get()
is
utilized
for
reading
data
from
inaccessible
properties.
究竟用中文怎么翻译呢?
inaccessible
:n.
难达到;难接近;无法理解。
有代码有真相:
复制代码
代码如下:
<?php
error_reporting(E_ALL);
class
stu{
private
$a;
private
$b
=
0;
public
$c;
public
$d
=
0;
//这里的
private
可以用
protected
public
替代
private
function
__get($name)
{
return
123;
}
//这里的
private
也可以用
protected
public
替代
private
function
__set($name,
$value)
{
echo
"This
is
set
function";
}
}
$s
=
new
stu();
var_mp($s->a);
//output:
123
var_mp($s->b);
//output:
123
var_mp($s->c);
//output:
null
var_mp($s->d);
//output:
0
var_mp($s->e);
//output:
123
$s->a
=
3;
//output:
This
is
set
function
$s->c
=
3;
//no
output
$s->f
=
3;
//output:
This
is
set
function
?>
结果分析:
如果没有__get方法,执行
var_mp($s->a)
var_mp($s->b)
会有致命的错误
如果没有__get方法,执行
var_mp($s->e)
会有一个notice,提示没有定义属性
$e
总结:
1.
从一个难以访问的属性读取数据的时候
__get()
方法被调用
2.
向一个难以访问的属性赋值的时候
__set()
方法被调用
3.
难以访问包括:(1)私有属性,(2)没有初始化的属性
4.
__isset()
__unset()
也类似

⑤ php魔术方法__tostring

__tostring()方法:在直接输出对象引用的时候,就不会产生错误,而是自动调用了__tostring()方法,输出__tostring()方法中返回的字符串

通俗来说就是 对象一般是使用print_r() 或 var_mp() 来打印访问

但对于一般闲的人来说直接 使用 echo 输出对象时,必定会报错的,原因是对象无法使用echo的。

这个时候如果想解决这个错误,咱们应该怎么操作呢?

可以很好的利用__tostring()这个魔术方法

但是切记使用__toString() 时返回值一定要使用return 来进行返回。

<?php
header("content-type:text/html;charset=utf-8");
class demo{
public $foo;
public function __construct($foo){
$this->foo=$foo;
}
//定义一个__toString()方法时,返加一个成员属性$foo
public function __toString(){
return $this->foo;
}
}
$demo=new demo('hello PHP成员');
echo $demo;

⑥ PHP __get和__set魔术方法在面向对象中的使用问题

php的面向对象思想编程中声明方法有三种不同的权限:public protect private。
public:权限是最大的,可以内部调用,实例调用等。
protected: 受保护类型,用于本类和继承类调用。
private: 私有类型,只有在本类中使用。
这些权限同样可以应用在变量声明中。
__set __get 都是php的魔术方法,主要是为了用来改变类的私有属性用的。
你觉得麻烦可以将private私有的变量改为公共public变量,这个要看需求和个人对面向对象的思考。
追问 : 我想知道的是(用private封装然后用__set或者__get )和(public设置类的属性)有什么不同.都可以取值赋值.
追答 : 没什么不同的,实现的效果都一样,只是private是为了限制访问入口少一些,或者之前用private时没有考虑到有如今的调用情况,所以在加了set或get。 比较public是所有人都可以访问,private是内部人可以访问,从权限来看,private会安全一些。

⑦ php什么是魔术方法

__construct(),
__destruct(),
__call(),
__callStatic(),
__get(),
__set(),
__isset(),
__unset(),
__sleep(),
__wakeup(),
__toString(),
__invoke(),
__set_state(),
__clone()

__debugInfo()
等方法在
PHP
中被称为"魔术方法"(Magic
methods)。在命名自己的类方法时不能使用这些方法名,除非是想使用其魔术功能。

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

父类的魔术方法:
function __construct()
{
echo '我是父类的构造函数(魔术方法)';

}

function __unset()
{
echo '我是父类的销毁方法(魔术方法)';

}
子类调用
function index()
{
parent::__construct();

parent::__unset();

}
输出:
我是父类的构造函数(魔术方法)
我是父类的销毁方法(魔术方法)

⑨ php5中魔术方法函数有哪几个,请举例说明各自的用法

__construct() :实例化对象时被调用;
__destuct():当删除一个对象或者对象操作终止是被执行;
__call():调用对象不存在方法时被调用;
__get():调用对象不存在的属性时被调用;
__set():设置对象不存在的属性时被调用;_
_toString():打印一个对象时被调用,比如echo $obj,print($obj);
__clone():克隆对象时被调用,比如$t = new Test();$tt = clone $t;
__sleep():serialize之前被调用,若对象比较大,想做一些删除在序列化,可以考虑使用该方法;
__wakeup():unserialize之前被调用,做些对象的初始化;
__isset():检测对象是否存在属性的时候被调用,如 isset($c->name);
__unset():unset一个对象属性时被调用,如:unset($c->name);
__set_state():调用var_export时被调用,用__set_state的返回值作为 var_export的返回值;,
__autoload():实例化一个对象时,如果对应的类不存在,在该方法被调用。
希望你能采纳,谢谢。

⑩ php魔术方法。。

在 PHP 里,将所有以 __(两个下划线)开头的类方法保留为魔术方法,所以在定义类方法时,除了上述魔术方法,建议不要以 __ 为前缀。

魔术方法的引入是对面向对象编程思想的进一步实现,重载就是通过魔术方法来实现的。

PHP 魔术方法主要有:
__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(),__sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo() 等。

最常见的是__construct(), __destruct(),__get(), __set()等:

__construct和__destruct是类的构造函数和析构函数。

阅读全文

与php类魔术方法相关的资料

热点内容
软通动力程序员节2021 浏览:845
安卓系统如何卸载安装包 浏览:868
短信删除助手文件夹 浏览:688
java办公自动化 浏览:340
php中超链接 浏览:253
linux默认路由设置 浏览:36
linux如何挂载iso 浏览:432
vs程序换文件夹后不能编译 浏览:557
安卓源码编译输入脚本没反应 浏览:47
phpmysql自增 浏览:167
把ppt保存为pdf 浏览:533
汽车密封件加密配件 浏览:887
黑马程序员15天基础班 浏览:560
java调整格式 浏览:521
香港云服务器租用价 浏览:78
linuxsublime3 浏览:560
imac混合硬盘命令 浏览:278
沈阳用什么app租房车 浏览:857
00后高中生都用什么app 浏览:239
戴尔塔式服务器怎么打开独立显卡 浏览:808