2013-01-21 51 views
1

好吧我已經縮小了我的問題,但不能提出修復。調用另一個類的變量,問題與範圍

我想讓第一個類能夠引用第二個類的變量。

class TheFirstClass{ 
    public function __construct(){ 
     include 'SecondClass.php'; 
     $SecondClass = new SecondClass; 
     echo($SecondClass->hour); 
    } 
} 

//in it's own file 
class TheSecondClass{ 
    public $second; 
    public $minute = 60; 
    public $hour; 
    public $day; 

    function __construct(){ 
     $second = 1; 
     $minute = ($second * 60); 
     $hour = ($minute * 60); 
     $day = ($hour * 24); 
    } 
} 

但是在這種情況下,只有「分鐘」可以從另一個班級訪問。如果我要刪除「= 60」,那麼分鐘將不會返回任何其他變量。

構造函數中的變量計算正確,但它們不影響範圍中較高的同名變量。爲什麼,而代之以構建代碼的正確方法是什麼?

回答

5

參考與$this->前綴屬性:

$this->second = 1; 
    $this->minute = ($this->second * 60); 
    $this->hour = ($this->minute * 60); 
    $this->day = ($this->hour * 24); 

由於不使用$this->要創建新的本地變量只在局部範圍存在,你是不是影響性能。

+2

+1爲解釋它爲什麼發生(局部範圍)。 –

+0

+1讓我變得更聰明一些。非常感謝。 –

2

您正在使用的變量僅在__construct函數內部使用。你必須使用對象變量看到他們在其他類

function __construct(){ 
    $this->second = 1; 
    $this->minute = ($this->second * 60); 
    $this->hour = ($this->minute * 60); 
    $this->day = ($this->hour * 24); 
} 

後來編輯:請注意,您不必使用第二類的構造函數中include功能。你可以有這樣的事情:

<?php 
    include('path/to/my_first_class.class.php'); 
    include('path/to/my_second_class.class.php'); 

    $myFirstObject = new my_first_class(); 
    $mySecondObject = new my_second_class(); 

?> 
+0

重寫爲包含提示。我想他們是PHP的「導入」。 –