类的自动加载及其一些魔术方法

类的自动加载

关键字:__autoload;

实际用法

function __autoload($name){

  require "./lib/".$name.".class.php";

}

$db = new A();

注册多个

  spl_autoload_regist(“函数名1”);

  spl_autoload_regist(“函数名2”);

  function 函数名1 ($calss){

     require "./lib/".$name.".class.php";

  }

  function 函数名2 ($calss){

     require "./class/".$name.".class.php";

  }

克隆

  关键字:clone

  class B{
    public $b2 = 2;
}
class A{
    public $a1 = 1;
    public $b1;    //意图用于存储B的对象
    function __construct(){
        $this->b1 = new B();
        //即new的时候b1中存储的是对象.
    }
    function __clone(){
        //为了实现深克隆
        $this->b1 = clone $this->b1;
      }
  }
  $o1 = new A();
  $o2 = clone $o1;
  $o1->a1 = 10;
  $o1->b1->b2 = 20;
  var_dump($o1);
  var_dump($o2);

浅克隆时:修改了o1中的b1数据,发现o2种的b1数据也跟着改变了(没有__clone())

深克隆时:人为去复制浅克隆复制不了数据(有__clone())

 对象的遍历

  $db->new a();

  foreach($db as $k=>$v){}

  注:protected和private属性都不能遍历出来

  若需要都遍历出来,应该吧foreach写在类的方法里里面,输出方法的结果

PHP内置标准

  $o1=new  stdclass();

  可以直接对$o1对象进行操作

  $o1=a->1;

将数据类型转化为对象

  数组转换为对象:数组的键名当作属性名,值为对应值

  $o1=(object)$arr

  只适用于纯字符下标数组

  null转换后为空对象

  其他标量数据转换为对象:属性名为固定的“scalar”,值为该变量的值

类型约束

   function f1(类名 $p1){....}:要求该参数只能使用该类的对象;

   function f1(接口名 $p1){....}:要求该参数只能使用实现该接口的对象;

   function f1(array $p1){....}:要求该参数只能使用数组;

   function f1(callable $p1){....}:要求该参数只能是一个函数或方法,此时称之为回调函数(方法)

常用魔术参数

  __CLASS__,:获取其所在的类的类名。

  __METHOD__:获取其所在的方法的方法名。

  __sleep(), 和 __wakeup()(序列化和反序列化)

  __tostring()方法(可以返回“合适”的字符串,也可以认为就是对象转换为字符串的结果)

class A{

  public $o1=1;

  public $o2=2;

  function __tostring(){

  return $this->o1.",".$this->o2

  }

}

返回结果为   1,2

  __invoke()方法

  对象当作一个“方法”(函数)的时候,会自动调用该魔术方法

 

转载于:https://www.cnblogs.com/diverman/p/8523578.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值