Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Singleton vs CodeIgniter-使用$this访问变量_Php_Codeigniter_Singleton_Variables - Fatal编程技术网

Php Singleton vs CodeIgniter-使用$this访问变量

Php Singleton vs CodeIgniter-使用$this访问变量,php,codeigniter,singleton,variables,Php,Codeigniter,Singleton,Variables,我想知道,这两种访问变量的方法的优缺点是什么: 1) CodeIgniter风格(这个有名字吗?) 2) 单一模式 public function doSomething() { $database = Framework_Database::getInstance(); } 一个明显的区别是,对于Singleton,您不能修改它。您只能访问它,但我在这里讨论的只是访问类或变量的实例 哦,还有,还有其他方法吗?这两种获取对现有实例的引用的方法实际上并不相互排斥。第一个是假设doSomethi

我想知道,这两种访问变量的方法的优缺点是什么:

1) CodeIgniter风格(这个有名字吗?)

2) 单一模式

public function doSomething()
{
 $database = Framework_Database::getInstance();
}
一个明显的区别是,对于Singleton,您不能修改它。您只能访问它,但我在这里讨论的只是访问类或变量的实例


哦,还有,还有其他方法吗?

这两种获取对现有实例的引用的方法实际上并不相互排斥。第一个是假设doSomething()方法包含在一个类中,该类还包含一个$database字段,该字段已设置为数据库实例(可能通过类构造函数)。$this->数据库的初始设置很可能是通过使用singleton的getInstance()方法实现的

我假设您可以比较这两者,看您是否将实例的引用保留为类的字段,还是始终直接从单例请求一个新引用。我想不出哪一次,这不能归结为简单的偏好,尽管我肯定会选择一个并坚持下去。(就个人而言,我会选择第二种方法来分离关注点)


最重要的是,代码中使用的模式的一致性将大大降低维护成本。

这两种获取现有实例引用的方法实际上并不相互排斥。第一个是假设doSomething()方法包含在一个类中,该类还包含一个$database字段,该字段已设置为数据库实例(可能通过类构造函数)。$this->数据库的初始设置很可能是通过使用singleton的getInstance()方法实现的

我假设您可以比较这两者,看您是否将实例的引用保留为类的字段,还是始终直接从单例请求一个新引用。我想不出哪一次,这不能归结为简单的偏好,尽管我肯定会选择一个并坚持下去。(就个人而言,我会选择第二种方法来分离关注点)

最重要的是,代码中使用的模式的一致性将大大降低维护成本

public function doSomething()
{
 $database = Framework_Database::getInstance();
}