zoukankan      html  css  js  c++  java
  • 类的自动加载及其一些魔术方法

    类的自动加载

    关键字:__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()方法

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

  • 相关阅读:
    【focus-lei 】微服务
    queryURLParams
    时间字符串的处理
    str.charAt()与str[]的区别
    数组去重函数封装
    数组去重的几种方法
    splice与slice区别
    变量与属性名的区别
    parseInt parseFloat Number三者转换的方式
    原生js实现选项卡样式切换的几种方式。
  • 原文地址:https://www.cnblogs.com/diverman/p/8523578.html
Copyright © 2011-2022 走看看