php db_factory::$db_factory = new db_factory();

liang.feng 发布于 2013/03/09 08:22
阅读 388
收藏 0
PHP

db_factory::$db_factory = new db_factory();

为什么可以将对象赋给静态变?

它和self::$db_factory = new db_factory(); 有什么区别?

加载中
0
自由PHP
自由PHP

在新的PHP版本中,我们不是在实例化的类复制给一个变量,而是指向一个变量。所以楼主上述只是一个指向,所以可以赋值。

手册上说,在使用self时,本身不会去实例化一个类,所以按照我的理解,可能使用self要比类名::静态变量更加节约内存和时间,因为前面可能要实例化一次,而后者要实例化两次

示例如下:

class test{
	static $_app;
	function __construct(){
		echo 'TEST';
	}
	function test1(){
		test::$_app = new test(); 
	}
	function test2(){
		self::$_app = new test(); 
	}
}

$test = new test();
echo $test->test1();//TESTTEST
echo '<hr />';
echo $test->test2();//TEST

 

0
l
liang.feng

引用来自“小小程序员”的答案

在新的PHP版本中,我们不是在实例化的类复制给一个变量,而是指向一个变量。所以楼主上述只是一个指向,所以可以赋值。

手册上说,在使用self时,本身不会去实例化一个类,所以按照我的理解,可能使用self要比类名::静态变量更加节约内存和时间,因为前面可能要实例化一次,而后者要实例化两次

示例如下:

class test{
	static $_app;
	function __construct(){
		echo 'TEST';
	}
	function test1(){
		test::$_app = new test(); 
	}
	function test2(){
		self::$_app = new test(); 
	}
}

$test = new test();
echo $test->test1();//TESTTEST
echo '<hr />';
echo $test->test2();//TEST

 

谢谢你的参与,谢谢

返回顶部
顶部