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


How to see variables from another class function in a PHP class?

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

这是我遇到的问题:

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

您是否尝试这样做:

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

向类添加一个变量:

class slike 
{
    $protected $slike;
     public function __construct($dire) {
     ...

像这样访问它:

$this->slike;

你需要将你的变量定义为类变量,我建议阅读这篇文章,看看如何声明类变量。

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

查看 http://docs.php.net/return 和 http://docs.php.net/array_rand

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

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

你可以在你的类中有一个私有属性$slike,把它设置在你的slike::skuplanjeslika((中,然后在你的slike::p rikazrandomslike((中使用它。另一种选择是将$slike作为参数传递给 slike::p rikazrandomslike:

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());

您遇到的问题与">范围"(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;
    }
}