2012-07-27 49 views
0

如何從同一個類中的另一個函數中查看變量?如何查看PHP類中另一個類函數的變量?

這裏的問題是我有:

class slike { 
    public function __construct($dire) { 
     $this->dire=$dire; 
    } 

    function skupljanjeslika() { 
     $slike = array(); 
     $handler = opendir($this->dire); 
     while ($file = readdir($handler)) { 
      if ($file != "." && $file != "..") { 
       $slike[] = $file; 
      } 
     } 

     closedir($handler); 

     return $slike; // **Array i want to use!** 
    } 

    function prikazradnomslike() { 
     $slike; // Here is the array from first function, but I can't see it here 
     $rezultat = count($slike)-1; 
     $koliko=rand(0, $rezultat); 
     $slika=$slike[$koliko]; 

     return $slika; 
    } 
} 

回答

1

一個變量添加到類:

class slike 
{ 
    $protected $slike; 

    public function __construct($dire) { 
    ... 

訪問這樣的:

$this->slike; 
+0

只要在構建之前添加它,就像你做的那樣? – 2012-07-27 13:42:12

+0

是的,在構造函數之前。 – 2012-07-27 13:42:39

2

你嘗試這樣做:

$slike = $this->skupljanjeslika(); 

或者,如果你方法skupljanjeslika之前使用,試試這個:
在你的類中,添加一個變種:

protected $slike; 

在skupljanjeslika替換該返回:

$this->slike = $slike; 

而且在prikazradnomslike ,請這樣做:

$slike = $this->slike; 


更有效率,你可以definitly做到這一點:

class slike { 
    protected $slike; 
    public function __construct($dire) { 
     $this->dire=$dire; 
    } 

    function skupljanjeslika() { 
     $slike = array(); 
     $handler = opendir($this->dire); 
     while ($file = readdir($handler)) { 
      if ($file != "." && $file != "..") { 
       $slike[] = $file; 
      } 
     } 

     closedir($handler); 

     $this->slike = $slike; 
    } 

    function prikazradnomslike() { 
     $rezultat = count($this->slike)-1; 
     $koliko=rand(0, $rezultat); 
     $slika=$this->slike[$koliko]; 

     return $slika; 
    } 
} 
+0

你認爲主要範圍?或內部功能? – 2012-07-27 13:41:04

+0

對於我的第一個解決方案,它是這樣的: 'function prikazradnomslike(){ $ slike = $ this-> skupljanjeslika();' – PoulsQ 2012-07-27 13:42:47

+0

這項工作是一樣的魅力,謝謝:) – 2012-07-27 14:14:44

0

您需要定義您的變量爲類變量,我建議閱讀this來看看如何聲明類變量。

0
class slike { 
    ... 
    function prikazradnomslike() 
    { 
    $slike = $this->skupljanjeslika(); 
    return $slike[ array_rand($slike, 1) ]; 
    } 
} 

看到http://docs.php.net/returnhttp://docs.php.net/array_rand

+0

這種方式工作正常,謝謝:) – 2012-07-27 13:59:36

+0

謝謝你給了我另一個很好的解決方案:function prikazradnomslike() { $ slike = $ this-> skupljanjeslika(); \t shuffle($ slike); \t $ slika = $ slike [0]; \t return $ slika; } – 2012-07-27 14:10:02

0

,您可以調用從skupljanjeslika()您希望您的返回值是這樣的:$slike = $this->skupljanjeslika();或者你可以將數組作爲參數傳遞,如果你想從別的地方調用它:

function prikazradnomslike($slike) 
{ 
    $rezultat = count($slike)-1; 
    $koliko=rand(0, $rezultat); 
    $slika=$slike[$koliko]; 
    return $slika; 
} 
0

你可以有一個私人財產$ S形的類,設置它在你的S形:: skuplanjeslika(),並在您的S形使用:: prikazrandomslike()。另一種選擇是通過$ S形作爲參數傳遞給S形:: prikazrandomslike:

class slike 
{ 
    public function __construct($dire) 
    { 
     $this->dire=$dire; 
    } 

    function skupljanjeslika() 
    { 
     $slike = array(); 
     $handler = opendir($this->dire); 
     while ($file = readdir($handler)) { 
     if ($file != "." && $file != "..") { 
     $slike[] = $file; 
     } 
     } 
     closedir($handler); 
     return $slike; // **Array i want to use!** 
    } 
    function prikazradnomslike($slike) 
    { 
     $rezultat = count($slike)-1; 
     $koliko=rand(0, $rezultat); 
     $slika=$slike[$koliko]; 
     return $slika; 
    } 
} 

$photos = new slike('mydir'); 
$photos->prikazrandomslike($photos->skuplanjeslika()); 
+0

Hvala majstore,svaka cast,imas li neki email? Txanks這個很好用! :) – 2012-07-27 14:01:35

0

您遇到的問題與「範圍」做(http://php.net/manual/en/language.variables.scope.php)。變量不能在最初聲明的函數之外訪問。

如果你想訪問腳本中的任何地方的變量有很多方法來實現這一點。你可以使用全局變量(在大多數情況下不推薦)或者將它們聲明爲類的一部分(這些可以是static或不是 - 在更靠後的位置更多)。

一類內聲明的變量將是這個樣子:

class myClass { 
    public $var1; 
    protected $var2; 
    private $var3; 

    public function foo() { 
     return $this->var1; 
    } 
} 

請記publicprivateprotected,因爲這些都是非常重要的關鍵詞。

一個類中的一個私有變量僅僅是類中訪問 - 它不會被任何子女繼承,也不能由對象(即$myClassObj->var1

實例的保護,直接訪問變量將由子類繼承,但在使用該對象的實例時具有相同的訪問限制。

公共變量可以直接訪問,並且會被繼承。

爲了訪問類中的任何這些變量,只需使用$this變量引用它即可。

例如爲:

$this->$var1; 

現在,如果一個變量聲明爲static這將是通過作用域解析運算符(::)在任何時候都可用內存和訪問。 然而私有和受保護的變量將不能直接訪問(同樣的規則適用於以前)。

myClass::$var1 = 4; // this works fine, and sets $var1 to 4 across ALL instances of myClass 
myClass::$var2 = 3; // this WILL NOT WORK - protected variable. 

如果你需要,你必須使用範圍解析運算符和關鍵字self是指它的類中訪問一個靜態變量。

class myClass { 
    public static $var1; 

    function bar() { 
     return self::$var1; 
    } 
} 
+0

太好了,非常感謝很多伴侶:) – 2012-07-27 14:05:32

相關問題