0

如何查看同一类中另一个函数的变量?

这是我遇到的问题:

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;
    }
}
4

7 回答 7

2

你试过这样做吗:

$slike = $this->skupljanjeslika();

或者,如果您之前使用过 skupljanjeslika 方法,请尝试以下操作:
在您的类中,添加一个 var :

protected $slike;

在 skupljanjeslika 中,将返回替换为:

$this->slike = $slike;

在 prikazradnomslike 中,这样做:

$slike = $this->slike;


为了提高效率,您绝对可以这样做:

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;
    }
}
于 2012-07-27T13:39:20.280 回答
1

在类中添加一个变量:

class slike 
{
    $protected $slike;

     public function __construct($dire) {
     ...

像这样访问它:

$this->slike;
于 2012-07-27T13:39:18.597 回答
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;
    }
}

记下public,privateprotected因为这些是非常重要的关键字。

类中的私有变量只能在该类中访问——它不会被任何子类继承,也不能被对象的实例直接访问(即$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;
    }
}
于 2012-07-27T13:50:30.527 回答
0

您需要将您的变量定义为类变量,我建议阅读内容以了解如何声明类变量。

于 2012-07-27T13:42:10.180 回答
0
class slike {
  ...
  function prikazradnomslike()
  {
    $slike = $this->skupljanjeslika();
    return $slike[ array_rand($slike, 1) ];
  }
}

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

于 2012-07-27T13:42:14.760 回答
0

你可以skupljanjeslika()像这样从你想要返回值的地方调用:$slike = $this->skupljanjeslika();或者如果你想从其他地方调用它,你可以将数组作为参数传递:

function prikazradnomslike($slike)
{
    $rezultat = count($slike)-1;
    $koliko=rand(0, $rezultat);
    $slika=$slike[$koliko];
    return $slika;
}
于 2012-07-27T13:42:42.017 回答
0

你可以在你的类中有一个私有属性 $slike,在你的 slike::skuplanjeslika() 中设置它并在你的 slike::prikazrandomslike() 中使用它。另一种选择是将 $slike 作为参数传递给 slike::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());
于 2012-07-27T13:46:57.803 回答