1、单例模式

单例模式三要素:

  • 拥有一个构造函数,并且为private
  • 拥有一个静态成员变量来保持类的实例
  • 拥有一个访问这个实例的静态方法
<?php
//Instan.php   单例类class Instan{static public $instance = null;private function __construct(){var_dump('new class');}public static function getInstance(){if(!self::$instance){self::$instance = new self();}return self::$instance;}public function getInfo(){echo 'Information...' . "<br />";}}

<?php
//test.phpinclude './Instan.php';Instan::getInstance()->getInfo();
Instan::getInstance()->getInfo();
Instan::getInstance()->getInfo();//在同一个进程中,无论调用多少次实例类,都只会实例化一次,这就是单例模式

2、注册树模式

  • 注册树模式通过将对象实例注册到一棵全局的对象树上
  • 需要的时候,从对象树上采摘下来使用
<?php
//test.phpinclude './abc';//只是为了演示注册树模式,生产环境不要这样写class Register{protected static $object = null;/*** 将对象实例挂到注册树上* @param $key* @param $object*/public static function set($key, $object){self::$object[$key] = $object;}/*** 获取注册树获取对象* @param $key*/public static function get($key){if(!isset(self::$object[$key])){self::$object[$key] = new $key;}return self::$object[$key];}/*** 从注册树上摘下* @param $key*/public static function unsetObj($key){unset(self::$object[$key]);}/*** 测试注册树*/public function test(){$abc = new Abc();self::set("Abc",$abc);//注册$res = self::get("Abc")->getAbc();//获取var_dump($res);//也可以直接get,因为get方法会自动注册self::get("Abc")->getAbc();}}

<?php
//abc.phpclass Abc
{public function getAbc(){var_dump('ABC');}
}

3、依赖注入(控制反转)

//Index.php 控制器class Index
{$person = new Person();$car = new Car();//此处的Car类可以灵活的换成其他类echo $person->driveCar($car);
}

//Person类class Person
{/*** 依赖:Person类依赖于Car类* 注入:Car类注入到Person类* @param $obj* @return mixed*/public function driveCar($obj){return $obj->run();}}

//Car类class Car
{public function run(){return '跑得快,跑得快...';}
}

4、反射

https://www.php.net/manual/zh/book.reflection.php

<?php
class Apple {public function firstMethod() { }final protected function secondMethod() { }private static function thirdMethod() { }
}$class = new ReflectionClass('Apple');
$methods = $class->getMethods();
var_dump($methods);
?>

array(3) {[0]=>&object(ReflectionMethod)#2 (2) {["name"]=>string(11) "firstMethod"["class"]=>string(5) "Apple"}[1]=>&object(ReflectionMethod)#3 (2) {["name"]=>string(12) "secondMethod"["class"]=>string(5) "Apple"}[2]=>&object(ReflectionMethod)#4 (2) {["name"]=>string(11) "thirdMethod"["class"]=>string(5) "Apple"}
}

php object 对象不存在。增加对象_PHP核心相关推荐

  1. php object 对象不存在。增加对象_PHP开发自己的框架,这些知识点不能错过

    一.PHP常用的四种数据结构 简介:spl是php的一个标准库. <?php//spl(php标准库)数据结构/*** 栈(先进后出)*/ $stack = new SplStack(); $s ...

  2. 例解List<Map<String, Object>>存放的对象问题

    一.提出问题 代码一: import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java ...

  3. Object.assign()合并多个对象

    Object.assign() 作用:合并多个对象. 用于将所有可枚举属性的值从一个或多个源对象复制到目标对象.它将返回目标对象. 现有对象A,对象B,如果要把A对象的属性的值复制到B上,可以使用Ob ...

  4. Object数据转化为Map对象

    使用request的getParameterMap(),将前段ajax传递的Object数据转化为Map对象 import java.util.HashMap; import java.util.It ...

  5. 关于jQuery对象(类数组对象)以及DOM对象相互转化问题——[object Object]和[object HTMLInputElement]

    之前在某官网课程上看有关jQuery和bootstrap的相关教程,有一节课是教我们如何制作价格菜单的按钮以及总价问题 选中按钮,按钮样式会发生变化,右上角价格会自动运算 6个菜单的html结构差不多 ...

  6. python的可变对象和不可变对象

    说明 在python中处处皆对象,那么具体细分又可以分为可变类型和不可变类型对象,今天来详细讨论一下. is 和 == 的区别 先提前说一下is和==的区别以帮助理解. is是判断两者是否属于同一内存 ...

  7. json转java对象_json转java对象

    1.DTO:Data Transfer Object,数据传送对象 2.对于日期格式的问题,也已经处理 3.json-lib-2.2.2-jdk13.jar (2.1在日期数组 json->ja ...

  8. JavaScript中本地对象、内置对象和宿主对象

    http://www.jianshu.com/p/a52e6e183427 http://blog.csdn.net/weiyastory/article/details/52837466 http: ...

  9. js判断对象是否为空对象_js对象

    七种数据类型 number string bool symbol undefined null object 五个Falsy 值 undefined null 0 NaN '' 对象 object 第 ...

最新文章

  1. Linux下Web服务器应用之基础简介
  2. C语言什么时候必须用到二级指针?(需要调用函数为一维空指针确定值的情况下,需要传入二维指针,也就是那个一维指针的指针)
  3. C++ 转换构造函数
  4. why do we use process keys
  5. 面试工作笔记001---记录各种语言_各种技术经典面试问题
  6. java获取访问路径、域名、项目名、请求入参
  7. html基础技术笔记
  8. java实现的判断括号是否成对的代码,()[]{}都可以
  9. pku 1151 (简单离散化求矩形覆盖总面积)
  10. 25 亿条/秒消息处理!Flink 又双叒叕被 Apache 官方提名
  11. PyCharm免费版安装使用
  12. 如何使用C#编写用友U8软件相关功能,适用于插件和二次开发
  13. 中国输配电设备产业需求形势及运行战略规划建议报告2021年版
  14. 有什么画ER关系比较好用的软件图?
  15. flutter集成Apple第三方登录
  16. 计算机win7卡顿如何解决方法,电脑win7系统出现卡顿怎么处理
  17. 360奇舞团钟恒:选用Vue.js进行组件化开发,我们遇到了哪些坑?
  18. 一、安装Centos
  19. 一本通5.4练习1:涂抹果酱
  20. 隐私保护与生成模型: 差分隐私GAN的梯度脱敏方法

热门文章

  1. pytorch利用rnn通过sin预测cos 利用lstm预测手写数字
  2. linux安装汉语输入法,在linux中安装google拼音输入法
  3. python3动态生成变量_【转载】 Python动态生成变量
  4. oracle 如何 更改 ref cursor 结果集,oracle – 如何从anther调用一个存储过程并修改返回的refcursor?...
  5. oracle数据库重建em,oracle 11g em重建报唯一约束错误解决方法
  6. zend studio php 5.5,PHP - 下载 - Zend Studio 5.5
  7. 文件上传java前端怎么写_做一个文件上传,前端是ajax提交数据后台是java,这个错误怎么办...
  8. wrapper怎么用_用责任链模式设计拦截器
  9. JAVA进阶教学之(泛型)
  10. Android studio的监听器初学者要懂