2013-10-28 36 views
0

進出口試圖通過從PHP腳本另一個類從一個類訪問變量:存取類變量與吸氣劑和setter

我的第一類是:

類數據{

private $length; 
    private $height;  

    public function setLength($length){ 
    $this->length = $length; 
    } 

    public function getLength(){ 
    return $this->length; 
    } 

    public function setHeight($height){ 
    $this->height = $height; 
    } 

    public function getHeight(){ 
    return $this->height; 
    } 

} 

我有另一個類:

class proccess extends data{ 

    public function getOrientation(){ 
     if($this->getLength() > $this->getHeight()) { 
     $orientation = 'landscape'; 
     } else { 
     $orientation = 'portrait'; 
    } 

    } 

}

當試圖從類進程訪問$ this-> getLenght()或$ this-getHeight()時,這些值爲空;我通過我的PHP腳本中的值,像這樣:

<?php 


    require_once('functions/data.php'); 
    require_once('functions/process.php'); 

    $data=new data(); 
    $process = new process(); 

    $data->setLength(25); 
    $data->setHeight(30); 
    $orientation = $process->getOrientation(); 

爲什麼功能getOrientation是不是能夠得到寬度和長度值的任何想法和我是如何解決這一問題?

回答

3

您正在爲不同對象設置值爲$data。您必須將它們設置爲$process

$process = new process(); 

    $process->setLength(25); 
    $process->setHeight(30); 
    $orientation = $process->getOrientation(); 
-1

的變量應該是protectedprivate - 看到這些:

http://php.net/manual/en/language.oop5.visibility.php What is the difference between public, private, and protected?

而且,正如MahanGM指出的那樣,你正在使用對象的兩個不同的實例,是不是完全相關。你應該做$process->setLength$process->setHeight$data->getOrientation

+2

他們需要保護嗎?在這個例子中'process'只使用'data'的公共方法,所以它不需要直接訪問'$ length'或'$ height'。 – danielpsc

+0

設置要保護的變量不起作用:( – Yeak

+0

不,只要屬性總是通過getter和setter'setFoo()'和'getFoo()'來訪問,變量應該保持'private' –