はい、スコープです。
index()内で宣言されている $hogeArray はローカル変数のなので、index()内でしか有効ではありません。
add()内では $hogeArray は初期化されていませんが、PHPでは未定義変数に代入を行ってもエラーとはならず新たに変数を初期化して値を設定します。この $hogeArray はadd()内でのローカル変数です。
ですので、両方の $hogeArray はそれぞれ別物ということです。これはJavaでも一緒です。
■方法1 $hogeArrayを渡す。
class HelloController extends AppController
{
public function index()
{
$this->autoRender = false;
$hogeArray = array('ばなな' ,'りんご','みかん' );
//追加されないことはないはず
$hogeArray = $this->add($hogeArray);
var_dump($hogeArray); //array(3) { [0]=> string(9) "ばなな" [1]=> string(9) "りんご" [2]=> string(9) "みかん" }
}
public function add($hogeArray)
{
$hogeArray[] = 'もも';
return $hogeArray;
}
}
■方法2 メンバ変数を定義する。
class HelloController extends AppController
{
private $hogeArray;
public function index()
{
$this->autoRender = false;
$this->hogeArray = array('ばなな' ,'りんご','みかん' );
//追加されないことはないはず
$this->add();
var_dump($this->hogeArray); //array(3) { [0]=> string(9) "ばなな" [1]=> string(9) "りんご" [2]=> string(9) "みかん" }
}
public function add()
{
$this->hogeArray[] = 'もも';
}
}
■番外編 参照渡し
class HelloController extends AppController
{
public function index()
{
$this->autoRender = false;
$hogeArray = array('ばなな' ,'りんご','みかん' );
//追加されないことはないはずだったはず…
$this->add($hogeArray);
var_dump($hogeArray); //array(3) { [0]=> string(9) "ばなな" [1]=> string(9) "りんご" [2]=> string(9) "みかん" }
}
public function add(&$hogeArray)
{
$hogeArray[] = 'もも';
}
}
■蛇足 グローバル変数をつかう
<?php
class HelloController extends AppController
{
public function index()
{
$this->autoRender = false;
global $hogeArray;
$hogeArray = array('ばなな' ,'りんご','みかん' );
//追加されないことはないはずだけど、こんなことはしないほうがいい…
$this->add();
var_dump($hogeArray); //array(3) { [0]=> string(9) "ばなな" [1]=> string(9) "りんご" [2]=> string(9) "みかん" }
}
public function add()
{
global $hogeArray;
$hogeArray[] = 'もも';
}
}
と言った感じです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/25 00:21