2012-07-27 50 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

相关问题