新聞中心
PHP對(duì)象到底是值傳遞還是引用傳遞
對(duì)象在函數(shù)中是引用傳遞
創(chuàng)新互聯(lián)建站自2013年創(chuàng)立以來,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、成都網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢想脫穎而出為使命,1280元婺城做網(wǎng)站,已為上家服務(wù),為婺城各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575
即使賦值給其它變量,也是引用
但是改變了$a的類型,準(zhǔn)確的說是zval.value指針都變化了,所以此時(shí)產(chǎn)生了分裂。
所以:
盡量避免函數(shù)內(nèi)操作外部對(duì)象,否則有可能造成致命性的邏輯錯(cuò)誤,特別是改變對(duì)象數(shù)據(jù)的時(shí)候。
或者在做對(duì)象數(shù)據(jù)傳遞的時(shí)候要注意數(shù)據(jù)的嚴(yán)謹(jǐn)性。
php問題 克隆對(duì)象和引用對(duì)象的區(qū)別是什么
復(fù)制文件、建立快捷方式的區(qū)別,克隆就是復(fù)制,引用就是快捷方式,引用的對(duì)象實(shí)際上同一個(gè)東西,修改任何一個(gè)變量,另外一個(gè)也會(huì)跟著變化。
php類如何使用外部對(duì)象
這個(gè)。。。。貌似實(shí)現(xiàn)不了
不知道你具體要做什么
你還是在類中實(shí)例那個(gè)對(duì)象的類好了
?php
class a
{
function say()
{
echo 'b';
}
}
class b
{
function test()
{
$a = new a();
$a-say();
}
}
$b = new b();
$b-test();
你的pdo對(duì)象應(yīng)該在整個(gè)項(xiàng)目都是不變的吧?你想調(diào)用已經(jīng)實(shí)例化的對(duì)象的話 一般數(shù)據(jù)庫類是個(gè)單例模式。
比如這樣
你的pdo類中加上這個(gè)單例模式方法
class database
{
private static $_instance;
public static function getInstance()
{
if(!isset(self::$_instance))
{
self::$_instance = new self();
}
return self::$_instance;
}
}
然后在你的登錄類里面直接調(diào)用這個(gè)類的這個(gè)方法
如果已經(jīng)實(shí)例化了 就用原來那個(gè)對(duì)象,沒有的話重新生成這個(gè)對(duì)象。
關(guān)于php的對(duì)象和引用??。?/h2>
要理解這個(gè)問題,關(guān)鍵是要理解php的賦值機(jī)制。其實(shí)就是四個(gè)字:“寫時(shí)拷貝”。如下圖,當(dāng)把a(bǔ)的值賦給b,a和b的關(guān)系屬于兩個(gè)變量指向同一內(nèi)容。但是當(dāng)其中一個(gè)變量賦值為不同于當(dāng)前內(nèi)容的值時(shí),才會(huì)重新分配一塊內(nèi)存來保存不同的變量,此時(shí)兩個(gè)變量的指向內(nèi)容變成兩個(gè),即所謂“寫時(shí)拷貝”。
如果理解了“寫時(shí)拷貝”的概念,我們繼續(xù)。在以下代碼后,繼續(xù)增加一次輸出。
class?A?{
public?$foo?=?1;
}??
$a?=?new?A;
$b?=?$a;?????//?$a?,$b都是同一個(gè)標(biāo)識(shí)符的拷貝
//?($a)?=?($b)?=?id????
$b-foo?=?2;
echo?$a-foo." ";
$b = 3;echo $a-foo;// 此為新增代碼。根據(jù)寫時(shí)拷貝原理,此時(shí)a仍指向?qū)ο髢?nèi)容。而b被賦值為3,因此b指向內(nèi)容為3。
如果到此還沒被搞蒙,繼續(xù)進(jìn)一步。
通過“”賦值,跟以上賦值是有區(qū)別的,屬于一塊內(nèi)存地址,擁有兩個(gè)不同名稱的情況。也就是說,其一改變,另一個(gè)會(huì)跟著改變。在以下代碼后,繼續(xù)增加一次輸出。
$c?=?new?A;
$d?=?$c;????//?$c?,$d是引用
//?($c,$d)?=?id
$d-foo?=?2;
echo?$c-foo." ";
$b = 3;echo $a-foo;// 此為新增代碼。此時(shí)a和b的值都指向3這個(gè)值,會(huì)報(bào)一個(gè)不是對(duì)象的錯(cuò)誤,如果直接輸出a或b會(huì)發(fā)現(xiàn),兩個(gè)變量的值都是3?,F(xiàn)象請自行驗(yàn)證。
PHP數(shù)組轉(zhuǎn)對(duì)象之后,怎么用對(duì)象的方式訪問數(shù)據(jù)
這里定義2個(gè)php匿名對(duì)象和數(shù)組相互轉(zhuǎn)換的函數(shù),代碼如下:
function array2object($array) {
if (is_array($array)) { $obj = new StdClass(); foreach ($array as $key = $val){ $obj-$key = $val; } } else { $obj = $array; } return $obj;}function object2array($object) { if (is_object($object)) { foreach ($object as $key = $value) { $array[$key] = $value; } } else { $array = $object; } return $array;}
用法示例如下:
$array = array('foo' = 'bar','one' = 'two','three' = 'four');$obj = array2object($array);print $obj-one; // output's "two"$arr = object2array($obj);print $arr['foo']; // output's bar
分享題目:php引用對(duì)象數(shù)據(jù) PHP 對(duì)象
當(dāng)前鏈接:http://www.dlmjj.cn/article/doddjjj.html