如何查看同一类中另一个函数的变量?
这是我遇到的问题:
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;
}
}
记下public
、private
和protected
,因为这些是非常重要的关键词。
中的私有变量只能在该类中访问 - 它不会被任何子级继承,也不能由对象的实例直接访问(即 $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;
}
}