На сервере PHP 5.2 этот код работал, но он больше не работает под 5.6:
$value = $record->{self::TABLE_METHOD}();
Под 5.6 я должен был сделать это:
$abc=self::TABLE_METHOD;
$value = $record->{$abc}();
Иначе говоря, он работает с использованием «self :: TABLE_METHOD» через переменную, но не в фигурных скобках.
Любая помощь в том, почему это происходит, будет высоко ценится!
По запросу это «реальный» код:
class TActiveRecordGateway extends TComponent
{
private $_manager;
private $_tables=array(); //table cache
private $_meta=array(); //meta data cache.
private $_commandBuilders=array();
private $_currentRecord;
/**
* Constant name for specifying optional table name in TActiveRecord.
*/
const TABLE_CONST='TABLE';
/**
* Method name for returning optional table name in in TActiveRecord
*/
const TABLE_METHOD='table';
/**
* Record gateway constructor.
* @param TActiveRecordManager $manager
*/
public function __construct(TActiveRecordManager $manager)
{
$this->_manager=$manager;
}
/**
* @return TActiveRecordManager record manager.
*/
protected function getManager()
{
return $this->_manager;
}
/**
* Gets the table name from the 'TABLE' constant of the active record
* class if defined, otherwise use the class name as table name.
* @param TActiveRecord active record instance
* @return string table name for the given record class.
*/
protected function getRecordTableName(TActiveRecord $record)
{
$class = new ReflectionClass($record);
if($class->hasConstant(self::TABLE_CONST))
{
$value = $class->getConstant(self::TABLE_CONST);
if(empty($value))
throw new TActiveRecordException('ar_invalid_tablename_property',
get_class($record),self::TABLE_CONST);
return $value;
}
elseif ($class->hasMethod(self::TABLE_METHOD))
{
$value = $record->{self::TABLE_METHOD}();
# THE PROBLEM HAPPENS HERE : $value is empty
Задача ещё не решена.
Других решений пока нет …