<?php
class Single
{
private static $instance = null;
private function __construct()
{
}
private function __clone()
{
}
public static function getInstance()
{
if (is_null(static::$instance)) {
static::$instance = new static();
}
return static::$instance
}
}
static和self的区别(在有继成时有区别):
static代表使用的这个类。
self写在哪个类里面, 实际调用的就是那个类。
工厂模式:
<?php
class Factory
{
private static $instance = array();
private function __construct()
{
}
public static function getInstance($className)
{
if (empty(static::$instance[$className])) {
static::$instance[$className] = new $className();
}
return static::$instance[$className];
}
}
注册树模式:
class Register
{
private static $objects = array();
public function set($alias, $object)
{
static::$objects[$alias] = $object;
}
public function get($alias)
{
return static::$objects[$alias];
}
public function _unset($alias)
{
unset(static::$objects[$alias]);
}
}
依赖注入(DI)、控制反转(IOC):
依赖注入(dependency injection)是指将组件的依赖通过外部以参数或其他形式注入;
控制反转(inversion of control)是将组件间的依赖关系从程序内部提到外部来管理;
依赖注入和控制反转本质上是一个意思。
<?php
class Car
{
public function pay()
{
echo "12万人民币";
}
}
class House
{
public function pay()
{
echo "120万人民币";
}
}
class Person
{
public function buy($obj)
{
$obj->pay();
}
}
$person = new Person();
$person->buy(new Car());
$person->buy(new House());
反射机制:
class Test
{
const A = 'a';
const B = 'b';
public function index()
{
echo 123;
}
public function abc($a, $b)
{
echo $a.'--'.$b;
}
}
$obj = new ReflectionClass('Test');
$obj->getConstants();//获取一组常量
$instance = $obj->newInstance();//相当于实例化Test
$instance->index();
$method = $obj->getMethod('abc');
$method->invokeArgs($instance, ['aaaa', 'bbbb']);//调用类的方法
单例模式:定义一个私有化的静态属性私有化构造函数定义一个访问这个实例的静态方法<?phpclass Single{ private static $instance = null; private function __construct() { } private function __clone() { } public static function getInstance() { if (i