PHP 魔术方法 __clone __toString(五)
__clone() - 当对象克隆的时候自动加载此方法
__toString() - 当对象需要echo打印输出的时候自动加载此方法
__clone()
<?php
class example{
public static $pa;
public $pb;
public function __construct(){
$this->pb = ++self::$pa;
} public function __clone(){
$this->pb = 'no zuo no die';
}
} $a = new example;
$b = new example;
$c = clone $b;
$b->pb = 'I Love You So Much!'; echo $a->pb;
echo '<hr/>';
echo $b->pb;
echo '<hr/>';
echo $c->pb;
echo '<hr/>';
echo $b->pb;
?>
结果如下
------------------------------------------------------------------------------------
I Love You So Much!
------------------------------------------------------------------------------------
no zuo no die /*要不是有__clone()这个魔术方法,这边的结果应该是2*/
------------------------------------------------------------------------------------
I Love You So Much!
php手册给了我们一个例子有些难以看懂,如下
<?php
class SubObject
{
static $instances = 0;
public $instance; public function __construct() {
$this->instance = ++self::$instances;
} public function __clone() {
$this->instance = ++self::$instances;
}
} class MyCloneable
{
public $object1;
public $object2; function __clone()
{ // 强制复制一份this->object, 否则仍然指向同一个对象
$this->object1 = clone $this->object1;
}
} $obj = new MyCloneable(); $obj->object1 = new SubObject();
$obj->object2 = new SubObject(); $obj2 = clone $obj; print("Original Object:\n");
print_r($obj); print("Cloned Object:\n");
print_r($obj2); ?>
最后的结果
Original Object:
MyCloneable Object
(
[object1] => SubObject Object
(
[instance] =>
) [object2] => SubObject Object
(
[instance] =>
) )
Cloned Object:
MyCloneable Object
(
[object1] => SubObject Object
(
[instance] => 3 /*可能这里比较难以理解,其实就是$obj2当克隆的时候将最后的instance为2的结果克隆,并且再执行SubObject::__clone方法*/
) [object2] => SubObject Object
(
[instance] =>
) )
__toString()
<?php
// Declare a simple class
class TestClass
{
public $foo; public function __construct($foo)
{
$this->foo = $foo;
} public function __toString() {
return $this->foo;
}
} $class = new TestClass('Hello');
echo $class;
?>
结果
Hello
PHP 魔术方法 __clone __toString(五)的更多相关文章
- PHP面向对象魔术方法之__toString函数
l 基本介绍: 当我们希望将一个对象当做字符串来输出时,就会触发__toString魔术方法. <?php header('content-type:text/html;charset=utf- ...
- PHP魔术方法__clone()篇
PHP中定义了一个内置方法__clone()来调整兑现的克隆行为: 当一个对象被克隆的时候会自动执行__clone()方法,而复制的对象可以在其方法内进行调整 header('Content-type ...
- PHP常用魔术方法(__toString魔术方法)
<?php //文件名:index.php define('a',__DIR__); include '/IMooc/Loader.php'; spl_autoload_register('\\ ...
- PHP面向对象常见的关键字和魔术方法
在PHP5的面向对象程序设计中提供了一些常见的关键字,用来修饰类.成员属性或成员方法,使他们具有特定的功能,例如final.static.const等关键字.还有一些比较实用的魔术方法,用来提高类或对 ...
- PHP魔术方法和魔法变量详解
一.魔术常量 __LINE__ 文件中的当前行号.__FILE__ 文件的完整路径和文件名.如果用在被包含文件中,则返回被包含的文件名. 自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对 ...
- 20191125PHP抽象类、接口和魔术方法
抽象类 不能被实例化,用于其他类的继承.使用abstract(抽象).抽象方法一定是抽象类,抽象类不一定有抽象方法. 接口interface是特殊的抽象类. eg: <?php //抽象类 ab ...
- php中魔术方法有什么用
在面向对象编程中,PHP提供了一系列的魔术方法,这些魔术方法为编程提供了很多便利.PHP中的魔术方法通常以__(两个下划线)开始,并且不需要显示的调用而是由某种特定的条件出发. __construct ...
- PHP中的魔术方法:__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone and __autoload
1.__get.__set 这两个方法是为在类和他们的父类中没有声明的属性而设计的: __get( $property ) 当调用一个未定义的属性时访问此方法: __set( $property, $ ...
- PHP中的魔术方法总结:__construct,__destruct ,__call,__callStatic,__get,__set,__isset, __unset ,__sleep,__wakeup,__toString,__set_state,__clone,__autoload
1.__get.__set这两个方法是为在类和他们的父类中没有声明的属性而设计的__get( $property ) 当调用一个未定义的属性时访问此方法__set( $property, $value ...
随机推荐
- [AngularJS] Html ngSanitize, $sce
Safely render arbitrary HTML snippets by using ngSanitize and $sce. By default angularJS consider us ...
- Linux下vim配置详解
转自http://www.cnblogs.com/witcxc/archive/2011/12/28/2304704.html
- C++赋值运算符函数
为类添加赋值运算符函数: 类型定义 class CMyString { public: CMyString(char *pData = NULL); CMyString(const CMyString ...
- inline(内联元素)和block(块级元素) 的区别
块级元素,默认是独自占据一行的.比如是<p>.<h1>.<h2>.<h3>.<h4>.<h5>.<h6>.<u ...
- C#_模拟webAp_POST-GET-PUT-DELETE
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...
- C#_uploadify_mvc_version
jQuery Uploadify在ASP.NET MVC3中的使用 1.Uploadify简介 Uploadify是基于jQuery的一种上传插件,支持多文件.带进度条显示上传,在项目开发中常被使用. ...
- problem:SVN error: (501 Not Implemented)
problem:SVN error: (501 Not Implemented)solution:The repository was moved so the URL I was using is ...
- RabbitMQ+PHP 消息队列环境配置
参考文档:http://www.cnblogs.com/phpinfo/p/4104551...http://blog.csdn.net/historyasamirror/ar... 依赖包安装 yu ...
- Android进阶笔记15:ListView篇之图片优化
1.图片异步加载: (1)处理图片的方式: 如果ListView中自定义的Item中有涉及到大量图片的,一定要对图片进行细心的处理,因为图片占的内存是 ListView 项中最头疼的,处理图片的方法大 ...
- cmd运行java,含传参,引用jar
1,创建一个java project,完成编码 在Eclipse的资源管理器中选中你要打包的项目,右键点击,选择“导出”项,弹出导出对话框,在下面的Java目录下选择“JAR 文件”项,下一步,在导出 ...