2012-10-19 37 views
1

可能重複:
Workaround for basic syntax not being parsedPHP中使用全局變量的類/對象

我不明白如何在PHP中使用內部的對象變量。

例如在JavaScript中我會這樣做,它會沒事的。

var foo = 10, 
    bar = {option: foo+5} 
; 

console.log(bar.option); 

在PHP我做相同的,但它沒有

$variable = 10; 

class myObject { 
    var $username = $variable + 5 ; 
    var $zzz = $username + 5; 

} 

而且是有可能的對象或僅在功能使用$this

最後,我將如何設置變量基於另一個同樣的對象,如myObject的第二行? :)

+4

使用構造函數,盧克。 (請閱讀說明書。) – kapa

回答

5

正確的方法是使用constructor - 創建對象時將運行的方法。

當定義class properties,只能使用恆定的值(1'xyz'array()是精細例如),而不是需要在運行時被評估表達式。

將該變量傳遞給構造函數,並且不使用全局變量。

class myObject { 
    public $username; 
    public $zzz; 

    public function __construct($variable) { 
     $this->username = $variable + 5 ; 
     $this->zzz = $this->username + 5; 
    } 
} 

$obj = new myObject(10); 
echo $obj->username; //15 

在PHP中,如果您不想編寫OOP代碼,則不需要使用類和對象。你可以簡單地創建好的舊功能。但是,如果您想使用它們,請嘗試熟悉OOP概念。

+0

什麼是標量? – Tomas

+0

@Tomas一個簡單的值。沒有函數調用,操作符等。 – kapa

+0

$ obj = new myObject(10);你爲什麼通過(10)? – Tomas

0

既然你訪問它的類我相信這是你想要的達到

class myObject { 
    public $username; 
    public $zzz; 
} 

$variable = 10; 
$obj = new myObject(); 
$obj->username = $variable + 5; 
$obj->zzz = $obj->username + 5; 

或者你可以有

class MyObject { 
    private $username; 
    private $zzz; 

    public function increment($variable) { 
     $this->username = $variable + 5; 
     $this->zzz = $this->username + 5; 
    } 
} 

$variable = 10; 
$obj = new MyObject(); 
$obj->increment($variable); // First Call 
$obj->increment(5); // Canbe called multiple times 
0

你可以有幾種類型的變量在對象外變量靜態和非靜態的,但也是公共的,私人的保護。我不會去太多的細節,但這裏有一個例子:

class MyClass 
{ 
    public $test = 'non-static'; 
    public static $otherTest = 'static'; 
    private $privateTest = 'private'; 
    const CONSTANT_TEST = 'constant'; 

    public function someMethod() { 
     echo $this->$test; // non-static 
     echo self::$otherTest; // static 
     echo static::$otherTest; // static 
     echo $this->privateTest; // private 
    } 

    public static staticMethod() { 
     echo $this->test; // error 
     echo self::$otherTest; // static 
     echo static::$otherTest; // static 
    } 
} 

$obj = new MyClass; 
echo $obj->test; // non-static 
echo $obj::otherTest; // static 
echo MyClass::otherTest; // static 
echo $obj->privateTest; // error 
echo $obj::CONSTANT_TEST; // constant 
echo MyClass::CONSTANT_TEST; // constant 
2

具體來說,你問如何在PHP中使用全局變量。要做到這一點,你會使用global關鍵字的時候,你定義的變量:

$variable = 10; 

class myObject { 
    function foo() { 
     global $variable; 
     $username = $variable + 5 ; 
     $zzz = $username + 5; 
    } 
} 

,但絕對不可以!這是一個壞主意。它違背了對象封裝的每一個原則來做這樣的事情,並且每次運行代碼時都會殺死一隻小狗。好吧,也許小狗是安全的,但它仍然不是一個好主意。

相反,您應該通過構造函數或通過訪問器方法將值傳遞給對象。見下:

// The following code is guaranteed not to kill any puppies 
class myObject { 

    private $_variable; 
    private $_userName; 
    private $_zzz; 

    public function __construct($value) { 
     $this->_variable = $value; 
     $this->_userName = $this->_variable + 5; 
     $this->_zzz = $this->_userName + 5; 
    } 

} 

$variable = 10; 
$obj = new myObject($variable); 
+1

在您的第一個示例中,'global'應該沒有任何作用(除非該文件包含在某個函數中)。它通常用於INSIDE函數中。表達式不能用在屬性聲明中。 – kapa

+0

謝謝你指出。我會解決這個問題。 –

+0

一定要刪除'var's - 我猜'$ this'需要被使用。 – kapa