zoukankan      html  css  js  c++  java
  • php基础部分总结篇-魔术方法

    //魔术方法,下面会通过一些实例来介绍魔术方法

    //1:__get,__set 当给不存在的属性赋值或者获取某个不存在的属性的时候,会报这个错误

    class student{
    public $property;
    public function __get($name){
    if(isset($property[$name])) {
    return $this->property[$name];
    }
    else
    echo "dui buqi mei you suoxuyao debianliang ";
    }

    public function __set($name,$value){
    if(isset($property[$name])) {
    $this->property[$name]=$value;
    echo "你要找的变量是:".$this->property[$name];
    }
    else
    echo "对不起,没有你要找的变量的啊 大兄弟";
    }
    }


    //下面进行对类的初始化
    //我们调用不存在的属性的时候,会发现
    $s=new student();

    //调用一个不存在的属性
    echo $s->name," ",$s->age;
    echo " ";
    $s->dge='sd';
    echo " ";
    $s->age='cjs';



    //总结一下,其实在我们项目使用过程中,调用不存在的变量是很容易出现的,为了不让程序报错,我们必须自己
    //定义一下处理这中错误方式的方法,这就是魔术方法__get__,__set__提供给我们常用的

    //**********************************************************************************

    //2:__construct() __disConstruct() 前者作为函数的构造方法,在我们初始化类的时候会被调用,第二个做为析构函数,会在我们销毁
    //实例变量的时候调用
    //构造函数往往提供给我们用来给属性进行初始化的方法,这里面
    class constructTest{
    public $name;
    public $age;
    public function __construct($a,$b)
    {
    $this->name=$a;
    $this->age=$b;
    }
    // php不像c++和java严格面向对象语言的方法,不能够实现构造函数的重载,如果我们给构造函数提供参数,也就意味着在实例化的时候提供相应的参数
    // public function __construct($a,$b)
    // {
    //
    // }
    }

    $a=new constructTest('cjs',20);
    echo " ",$a->age," ",$a->name," ";



    //总结:其实我们真正做项目的时候,常用的做法是保证类中只有一个实例可以使用,这就是我们常说的单例模式
    //思路其实很简单,我们把构造函数私有化,然后提供一个公有的方法来判断,如果已经存在建立的实例,我们就
    //直接返回已经创建的实例,如果不存在,我们就重新建立

    class Instance{
    //我们通过一个属性来保存新建的实例变量,很容易理解,如果我们用函数中的变量保存实例,那么在下一次
    //调用函数获取实例的时候,就会重新初始化,这是我们不愿意看到的
    private static $instance;
    public $age;
    private function __construct($a)
    {
    $this->age=$a;
    }

    //提供一个公有的方法给用户获取实例
    public static function getInstance(){
    if(!isset(self::$instance))
    self::$instance=new Instance('cjs');
    return self::$instance;
    }
    //这里面我们可以注意一下, ::是区域运算符,我们可以通过这个调用静态或者非金泰属性和方法
    }

    $a=Instance::getInstance();
    $b=Instance::getInstance();
    var_dump($a);
    var_dump($b);

    //3:__isset() __unset()


    class student{
    private $name;
    private $age;
    public $age1;
    public function __isset($name){
    echo "wocai ni xiang yaowomen".$name;
    }
    }
    $x=new student();
    if(isset($x->age1)){
    echo "i have this";
    }

    //其实看,我们在判断不存在的属性的时候才会调用魔术方法__isset()
    if(isset($x->tail))
    echo "bucunzai";

    //同理,我们在 使用ubset取消不存在的变量的时候,也会调用魔术方法__unset()
     
  • 相关阅读:
    想要提高自己的写作水平?吃透这篇文章就够了
    Linux(Ubuntu)下搭建ASP.NET Core环境
    详解ASP.NET Core Docker部署
    《你有多少问题要请示》精华集粹
    5年,我从文员一路晋升到总监,薪资翻了5倍[转]
    《设计你的人生》的部分经典语录
    深入浅出Redis-redis哨兵集群[转]
    什么是全栈开发者
    Asp.net mvc中应用autofac
    js unicode处理
  • 原文地址:https://www.cnblogs.com/dtiove/p/5709373.html
Copyright © 2011-2022 走看看