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 ...
随机推荐
- LINUX 内核导论
http://blog.csdn.net/ljy1988123/article/category/1490573/2
- 编写3个不同版本的程序,令其均能输出ia的元素
#include<iostream> #include<vector> #include<string> using namespace std; int main ...
- day06 Java基础
1.二维数组格式一(列固定):数据类型[][] 变量名=new 数据类型[m][n]; 二维数组格式二(列变化):数据类型[][] 变量名=new 数据类型[m][]; 二维数组格式三:数据类型[][ ...
- SQL SERVER 中 GO 的用法2
具体不废话了,请看下文详解. 1 2 3 4 5 6 7 8 9 10 use db_CSharp go select *, 备注=case when Grade>=90 then '成绩 ...
- Android进阶笔记07:Android之MVC 理解
1. 为什么需要MVC ? 软件中最核心的,最基本的东西是什么? 答:是的,是数据.我们写的所有代码,都是围绕数据的. 围绕着数据的产生.修改等变化,出现了业务逻辑. 围绕着数 ...
- Android(java)学习笔记102:Map集合功能概述
下面通过代码引入Map集合:如下 package cn.itcast_01; import java.util.HashMap; import java.util.Map; /* * 作为学生来说,是 ...
- Flask的部署
当前对部署flask的一些学习: 1.全局安装nginx 1.1 nginx的配置文件怎么写? $ sudo rm /etc/nginx/sites-enabled/default $ sudo to ...
- storyBoard中的Segue跳转
//———————————————--------------在不确定的Segue跳转----------------------------------- 多个按钮指向要跳转的视图 1.在一个恰 ...
- Python 中使用optparse进行参数解析
使用过Linux/Unix的人都会知道,命令行下的很多命令都需要参数,在C语言中添加和解析参数比较繁琐.Python中提供了optparse模块可以非常方便地处理命令行参数. 1 命令行参数的样 ...
- Oracle 中记录用户登录信息
我们可以使用 Oracle Audit 函数来记录用户登录信息,但是如果开放了 Audit 函数将会使 Oracle 性能下降,甚至导致 Oracle 崩溃.那我们如何才能记录用户登录信息呢?其实我们 ...