Я установил некоторое значение с помощью функции setData Magento:
$this->getChild('childBlockName')->setData('search_field_value', $this->__('field value'));
в родительском .phtml файле.
Затем в дочернем .phtml файле я пытаюсь получить значение:
echo $this->search_field_value.'<br />';
$testvar = empty($this->search_field_value) ? 'empty value':'non empty value';
echo $testvar;
эхо:
'field value'
'empty value'
а также:
$testvar = $this->search_field_value;
$testvar2 = empty($testvar) ? 'empty value':'non empty value';
echo $testvar2;
эхо:
'non empty value'
Почему свойство объекта распознается как непустое только после присвоения его переменной?
здесь проблема с функцией PHP
empty()
эта функция принимает только параметр. Если у вас есть такая функция, как:
function getValue(){
return "hallo";
}
а затем попробуйте сделать что-то вроде:
echo empty(getValue());
вы получите ошибку, но если вы попытаетесь сделать:
$val = getValue();
echo empty($val);
Вы получите правильный ответ без ошибок. Это означает, что функция empty () не исключает возвращаемое значение, только переменную.
Я надеюсь, что это помогает.
объяснение для magento:
да, вы правы, ваш код работает нормально, но в magento он немного отличается от вашего примера, потому что magento фактически использует магические функции и массив:
когда вы устанавливаете виртуальную переменную в magento, она фактически становится частью массива, а не просто виртуальной переменной, как в вашем примере. Если вы посмотрите в функции пурпурного
public function setData($key, $value=null);
есть строка, где вы добавляете свое значение в массив _data:
$this->_data[$key] = $value;
Итак, когда вы делаете что-то вроде этого:
$this->search_field_value
вы на самом деле вызываете магический метод __call, и эта функция ищет в массиве _data введенное значение, в нашем случае search_field_value. Это причина, почему magento возвращается пустым.
Других решений пока нет …