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

クラスに $slike というプライベート プロパティを設定し、slike::skuplanjeslika() で設定して、slike::prikazrandomslike() で使用することができます。もう 1 つのオプションは、$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 に答える
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/returnおよびhttp://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

あなたが抱えている問題は、「スコープ」(http://php.net/manual/en/language.variables.scope.php)に関係しています。変数は、最初に宣言された関数の外ではアクセスできません。

スクリプト内の任意の場所にある変数にアクセスしたい場合、これを実現する方法はいくつかあります。グローバル変数を使用することも (ほとんどの場合は推奨されません)、クラスの一部として宣言することもできます (これらは可能であってもなくてもかまいstaticません - 詳細は後述します)。

クラス内で宣言された変数は、次のようになります。

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

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

publicprivateおよびprotectedは非常に重要なキーワードであるため、メモしておいてください。

クラス内のプライベート変数は、そのクラス内でのみアクセスできます。子には継承されず、オブジェクトのインスタンスから直接アクセスすることもできません (つまり$myClassObj->var1)

保護された変数は子クラスに継承されますが、オブジェクトのインスタンスを使用する場合は同じアクセス制限があります。

パブリック変数は直接アクセスでき、継承されます。

クラス内のこれらの変数にアクセスするには、$this変数を使用して参照するだけです。

例えば:

$this->$var1;

ここで、変数を宣言すると、staticいつでもメモリ内で使用でき、スコープ解決演算子 ( ::) を介してアクセスできます。ただし、private 変数と protected 変数には直接アクセスできません (以前と同じ規則が適用されます)。

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 に答える