2
回答
php db_factory::$db_factory = new db_factory();
终于搞明白,存储TCO原来是这样算的>>>   

db_factory::$db_factory = new db_factory();

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

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

PHP
举报
liang.feng
发帖于5年前 2回/373阅
共有2个答案 最后回答: 5年前

在新的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

 

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

在新的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

 

谢谢你的参与,谢谢

顶部