PHP不推荐使用大括号的代码-没有相关文档?

PHP不推荐使用大括号的代码-没有相关文档?,php,syntax,php-5.6,incompatibility,prado,Php,Syntax,Php 5.6,Incompatibility,Prado,在PHP 5.2服务器上,此代码正常工作,但在5.6下不再工作: $value = $record->{self::TABLE_METHOD}(); 根据5.6,我必须这样做: $abc=self::TABLE_METHOD; $value = $record->{$abc}(); 否则,它通过变量使用“self::TABLE_METHOD”,但不使用大括号 任何关于为什么会发生这种情况的帮助都将不胜感激 根据要求,这是“真实”代码: 它确实有效。正如您在上面看到的。@Denis

在PHP 5.2服务器上,此代码正常工作,但在5.6下不再工作:

$value = $record->{self::TABLE_METHOD}();
根据5.6,我必须这样做:

$abc=self::TABLE_METHOD;
$value = $record->{$abc}();
否则,它通过变量使用“self::TABLE_METHOD”,但不使用大括号

任何关于为什么会发生这种情况的帮助都将不胜感激

根据要求,这是“真实”代码:


它确实有效。正如您在上面看到的。@DenisBUCHER请发布整个代码,您可能定义了错误的内容。
$record
的方法
table
是否返回了一些内容?回显方法中的某些内容,然后就知道该方法是否运行了。正如这个精简的代码片段所显示的,PHP没有花括号的问题,即使恢复类定义,PHP仍然没有问题。这是一个仅可在服务器上复制的问题。我建议重新安装。
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