__tostring用法,__call处理调用,__clone克隆对象

本文深入探讨PHP中类方法的自动调用机制,包括`__toString()`方法在对象输出时的自动执行、通过`clone`实现对象克隆及其属性修改、以及`__call()`方法在调用不存在方法时的自动处理。通过实例代码解析这些关键概念,旨在帮助开发者更高效地利用PHP的特性进行面向对象编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

“__”开始类方法(PHP给我们提供),都是在某一时刻不同情况下自动调用执行的方法。

1、__tostring(),也是自动调用,在直接输出对象引用时自动调用,对象引用是一个指针,比如:$p->new person(),$p就是一个对象引用。

如果在类中定义了__tostring()方法,直接输出引用对象时,就不会产生错误,而是自动调用了__tostring()方法,输出__tostring()中的返回字符,所以__tostring()中

一定要有返回值(return).

如下:

abstract class user{
 //这里定义抽象方法
 //注意抽象方法没有方法体,而且方法结束使用;而不是{}
 abstract function setSale();
 abstract function getSale();
 //这里定义__tostring方法
 public function __tostring(){
  return get_class($this);
 }
}

2、克隆对象

在一个项目中有时候需要用到两个或者多个相同的对象,如果使用new关键字重新创建新对象,再赋上相同属性,这样比较繁琐而且易出错。

所以需要根据一个对象克隆完全一样的对象,是非常必要的,而且克隆后对象互不干扰。

在PHP5中使用clone克隆对象,PHP5定义一个特殊方法“__clone”,是在克隆对象自动调用的。用"__clone"方法建立一个与原对象拥有相同属性和方法的对象。

如果需要修改克隆对象的属性和方法,需要在“__clone”中重写原本的属性和方法。“__clone”中可以没有参数,包含$this和$that两个指针,$this指向复本,$that 指向原本。

 class personP{

  var $name;

  var $sex;

  var $age;

  fucntion __construct($name,$sex,$age){

    $this->name=$name;

    $this->sex=$sex;

    $this->age=$age;

  }

  fucntion say(){

    echo "我的名字叫:".$this->name."性别是:".$this->sex."年龄是:".$this->age;

  }

  function __clone(){

    $this->name="我是假的$this->name";

    $this->sex=30;

  }

}

$p1=new Person("张三", "男", 20);
$p2=clone $p1;
$p1->say();
$p2->say();

上例输出:
执行结果
我的名子叫:张三性别:男我的年龄是:20
我的名子叫:我是假的张三性别:男我的年龄是:30

3、__call()

在程序开发中,如果使用对象调用对象内部方法时,调用的方法不存在,程序就会出错,然后程序退出不继续执行。可以不可以如果调用方法不存在时,提示我们调用方法及使用的参数不存在,但程序可以继续执行。这时间就需要调用方法不存在自动调用__call()方法。

<?php
//这是一个测试的类,里面没有属性和方法
class Test{
//调用不存的方法时自动调用的方法,第一个参数为方法名,第二个参数是数组参数
function __call($function_name, $args){
print "你所调用的函数:$function_name(参数:";
print_r($args);
print ")不存在!<br>n";
}
}
//产生一个Test类的对象
$test=new Test();
//调用对象里不存在的方法
$test->demo("one", "two", "three");
//程序不会退出可以执行到这里
echo "this is a test<br>";
?>

上例输出结果为:
执行结果
你所调用的函数: demo(参数:Array ( [0] => one [1] => two [2] => three ) )不存在!
this is a test.

转载于:https://www.cnblogs.com/ljw7pm/archive/2013/02/08/2909093.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值