php设计模式之单例模式

废话就不说了,先看图,看不懂也不要紧,粘贴代码运行一下,在看看途中的相关文字吧。
在这里插入图片描述

<?php
class Person1 {}
/**
*  单例模式
**/
class Person
{
  /*
    * 知识点:
    * 必须先声明一个静态私有属性:用来保存当前类的实例
    * 1. 为什么必须是静态的?因为静态成员属于类,并被类所有实例所共享
    * 2. 为什么必须是私有的?不允许外部直接访问,仅允许通过类方法控制方法
    * 3. 为什么要有初始值null,因为类内部访问接口需要检测实例的状态,判断是否需要实例化
    * 扩展点:
    * 1. php中this、self、parent的含义和类内(外)的使用方法
        this是指向当前对象的指针(姑且用C里面的指针来看吧)
          self是指向当前类的指针
          parent是指向父类的指针
        在***类中***读取***静态变量***的方法:
            echo "静态字段:<br>";
            echo "类名读取:".Person::$str."<br>";
            echo "self读取:".self::$str."<br>";
            echo "this读取:".$this::$str."<br>";
        在***类外***读取***静态变量***的方法:
            echo "类名读取:".Person::$str."<br>";
      2.注意事项dian

    * 
    * 
    * 
  */
  public static $instance;

  public static $str = "123123";
  private static $varStr;
  private $personInfo;//用户基本信息组

  //私有化构造函数,防止外界实例化对象
  private function __construct($name ,$age ,$gender)
  {
    $this->personInfo = array(
        'name' => $name,
        'age'  => $age,
        'gender' => $gender
    );
  }
  //私有化克隆函数,防止外界克隆对象
  private function __clone()
  {

  }
  //单例访问统一入口
  public static function getInstance($name ,$age ,$gender)
  {
    //写法1
    if(!(self::$instance instanceof Person)) self::$instance = new Person($name ,$age ,$gender);

    //写法2
    // if(!(self::$instance instanceof self)) self::$instance = new self($name ,$age ,$gender);

    return self::$instance;
  }
  //数据库查询操作
  public function getinfo()
  {
    return $this->personInfo;
  }

  public static function 静态方法($_varStr){
    Person::$varStr = $_varStr;
    echo '获取静态公共变量'.self::$str."<br>";
    echo '给静态私有变量赋值---------'.Person::$varStr."<br>";

  }
}
echo '在未实例化对象时,调用类静态方法“静态方法”'."<br>";
Person::静态方法('我是类静态方法');


$obj1 = new Person1;
$obj2 = new Person1;
var_dump($obj1,$obj2);
echo '<hr>';

//实例化单例Person类
$obj1 = Person::getInstance('Tom',25,'男');
$obj2 = Person::getInstance('jerry',36,'女');
var_dump($obj1,$obj2);

?>

注意代码中的注释点啊!!!!!!!!!!!!


扩展点

变量内存存储
php单例内容扩展链接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值