2016-11-01 40 views
-1

我有一個非常簡單的類:裏面定義函數範圍動態可變

class MyClass 
{ 
     public function someFunction() 
     { 
     echo array_key_exists('dynamicVariable', $GLOBALS) ? 'true' : 'false'; 
     } 
} 

我想定義「對飛」內部「someFunction」一個變量,但我似乎無法弄清楚如何在功能範圍內執行此操作。

$classInstance = new MyClass(); 

$varName = 'dynamicVariable'; 
$classInstance->$varName; 

我想要做什麼:

$classInstance = new MyClass(); 

$varName = 'dynamicVariable'; 
$classInstance->functionScopeReference->$varName; 


$classInstance->myFunction(); <-- this will print TRUE 

如何可以做同樣的事情,但在someFunction範圍界定,而不是MyClass的範圍呢,?由於

+1

有充足的 「好」 的OOP教程;你有沒有讀過(一些)他們? –

+1

簡而言之,**除了變量是在任何方法內使用的「屬性」之外,您不能從方法範圍之外**。 – dbf

+0

@dbf謝謝!你可以發表這個評論作爲答案,我會在'$ varName ='dynamicVariable'後面標記 – 0x29a

回答

4
+0

對我來說「不清楚你問的是什麼」是一個更合適的方式來解決這個問題,但無論如何。 +1,對於OP來說它是不可能的,所以我們不能幫忙。 – Federkun

+0

@Federkun我投了「太寬」。然而,鑑於額外的編輯和他們不標記(社區維基)答案,是一個很好的投票「不清楚」。順便說一句,我沒有對這些做出任何表示,以防你可能不知道;-)但是,無論如何感謝您的投票,*歡呼* –

+0

@Federkun「不清楚你在問什麼」?我清楚地提供了一個代碼示例,說明了我所做的和**我正在嘗試做的事情** +額外的解釋和dbf清楚地理解了我。如果我的語言不清楚,我很抱歉,但是我解釋並舉例說明了我正在嘗試做的事情。我很欣賞Fred-ii-努力,謝謝,我認爲這是正確的答案,並且會幫助任何想要做同樣奇怪事情的人嘗試。 – 0x29a

1

通過使用$this keyword ......我建議應對其解釋範圍更好,然後我可以面向對象編程的好101場......

class MyClass 
{ 
    public function someFunction($foo) 
    { 
     $this->dynamicVariable = $foo; 
    } 
} 

$classInstance = new MyClass(); 
$classInstance->someFunction('dynamicVariable'); 

echo $classInstance->dynamicVariable; 

編輯:爲了更好地回答OP的問題(對不起不讀的是正確的):雖然它不改變範圍,解決方法是使用getter和setter方法,讓你的性私人:

class MyClass 
{ 
    private $property_one; // can't access this without using the getPropertyOne function 
    private $property_two; 

    public function setPropertyOne($bool) 
    { 
     $this->property_one = $bool; 
    } 

    public function getPropertyOne() 
    { 
     return $this->property_one; 
    } 

    public function setPropertyTwo($bool) 
    { 
     $this->property_two = $bool; 
    } 

    public function getPropertyTwo() 
    { 
     return $this->property_two; 
    } 
} 

$classInstance = new MyClass(); 

// trying to access the properties without using the functions results in an error 
echo $classInstance->property_one; 

$classInstance->setPropertyOne(true); 
echo $classInstance->getPropertyOne(); 

$classInstance->setPropertyTwo(false); 
echo $classInstance->getPropertyTwo(); 
+1

*「我會建議一個關於面向對象編程的101課程。」* - 這本身值得讚賞;-) –

+0

你甚至讀過這個問題嗎?即使從你理解我的問題的角度來看,你的回答是錯誤的。我建議你採取101邏輯詛咒 – 0x29a

+0

你知道你沒有以任何方式回答我的問題嗎?你只是給了我一個基本的OOP「解決方法」,這與我的「定義動態變量」目標完全無關,並告訴我需要了解OOP的基礎知識。 @dbf指出的這個問題的答案是「從課堂以外不可能」。如果你誤解了這個問題並且給了我一個我從來沒有問過的完全不同的問題的答案,那麼不需要攻擊別人的智慧。我討厭人們沒有完全理解這個問題,並認爲第一個有點相關的解決方案「是它!」 – 0x29a