2016-02-26 28 views
-1

有什麼辦法可以在PHP中抑制__get__set函數?顯然它們存在沒有定義。它們在PHP的4.x,5.x和7.x版本中有何不同?如何抑制__get和__set PHP函數

這是我的代碼。 2個檔,

//File1.php

<?php 
namespace N; 

class File1 
{ 
    public $name; 
} 

//File2.php

<?php 

require 'File1.php'; 

$a = new \N\File1(); 
$a->name1 = 'Avian Carrier'; 
echo $a->name1; 

?> 

還有回聲 '禽流運營商'?

+2

」存在沒有定義「< - 這是什麼意思? – jszobody

+0

默認情況下不存在,不。 @jszobody我認爲他意味着他們存在隱式(繼承) –

+0

我建議顯示一些代碼。看起來你正在做一些你認爲不可能的事情,也許告訴我們具體是什麼? – jszobody

回答

0

__get和__set不能被抑制,它們是PHP語言的方法。 「

1

當你聲稱它們默認存在時,你錯了 - 它們必須由開發人員定義。

您可以在官方文檔中獲得更多的細節:在PHP5中引入並根據更改日誌http://php.net/manual/en/language.oop5.overloading.php#object.get

這些「神奇」的方法 - 他們既然都不會改變。這個邏輯非常簡單 - 如果您試圖訪問對象上的不可訪問的屬性並且該對象具有__get()方法,則PHP將使用單個參數(屬性名稱)調用該方法。與__set()相同。

這些方法允許您引入通常稱爲魔術屬性的東西。

直到你實現它們,它們纔會存在。

+1

請幫我理解,因爲我訪問了一個未定義的屬性,並且沒有實現__get或__set我能夠回顯屬性,當然我在這裏丟失了一些東西。 –

+0

請顯示代碼摘錄?你應該從PHP –

0

這些都是神奇的方法,你可以使用它們或不使用它們。沒有辦法「壓制」屬於該語言的某些東西。 Ref:http://php.net/manual/en/language.oop5.magic.php

+0

收到一個錯誤,他們執行沒有定義? –

+0

你需要聲明它們被執行,當你聲明例如__get,並且你試圖獲得一個名稱沒有在類上聲明的屬性時,如果將執行magic __get方法,所以它有助於獲取沒有需要公開你的所有屬性,並檢查訪問權限等。理解這個最簡單的方法是測試它:http://php.net/manual/en/language.oop5.overloading.php#object.get –

相關問題