Я пытался получить доступ с $this->$arrDataName[$key]
на элементе с ключом $key
от массива $this->$arrDataName
. Но PHP интерпретирует ту несправедливость.
Я попробовал его { }
вокруг $arrDataName
кому: $this->{$arrDataName}[$key]
, но это не работает.
На php.net я нашел совет, но я не могу понять это.
Для использования переменных переменных с массивами необходимо разрешить проблему неоднозначности. Таким образом, если Вы пишете $$a [1] затем, синтаксический анализатор должен знать, означали ли Вы использовать $a [1] в качестве переменной, или если Вы хотели $$a как переменную и затем эти [1] индекс от той переменной. Синтаксис для того, чтобы разрешить эту неоднозначность: $ {$a [1]} для первого случая и $ {$a} [1] для второго.
Возможно, любой может помочь мне.
Спасибо!
Править:
Я думаю, что это не работает, но я забыл заполнять массив.
Наконец это работает.:)
Это - решение: $this->{$arrDataName}[$key]
Ваш синтаксис правильный:
$this->{$varName}[$key]
Вы также можете использовать дополнительную переменную для этого:
$myTempArr = $this->$arrDataName;
$myTempArr[ $key ];
ИМХО, читабельность так лучше...
<?php
class Foo {
public function __construct() {
$this->myArray = array('FooBar');
$arrayName = 'myArray';
echo $this->{$arrayName}[0];
}
}
new Foo;
У меня это сработало идеально, вывело FooBar
.
Ну, насколько я знаю, это работает. Вот как я его тестировал:
<?php
class tis
{
var $a = array('a', 'b', 'c');
var $b = array('x', 'y', 'z');
public function read($var)
{
echo $this->{$var}[1].'<br />';
}
}
$t = new tis();
$t->read('a');
$t->read('b');
?>
И вывод:
b
y
Проверьте корректность $arrDataName
. Включите отладку и отображение ошибок PHP (включая уведомления). Может быть, вы пытаетесь прочитать несуществующее свойство?
И еще, какую версию PHP вы используете? Я предполагаю PHP5?
.Предположим, что ваш массив $this->arrDataName
. У вас есть $key
, поэтому ваш объект будет $this->arrDataName[$key]
.
Если вам нужно содержимое переменной, имя которой хранится в $this->arrDataName[$key]
, вы должны сделать следующее:
<?php
echo ${$this->arrDataName[$key]};
?>