【问题标题】:Reflection class PHP from file?来自文件的反射类PHP?
【发布时间】:2013-05-26 13:43:15
【问题描述】:

我想在不初始化这个类的情况下从 PHP 类中获取价值。 为此,我给出了该类的文件路径,以便对其进行审查,但未初始化。

我的想法:

<?php
$reflection = new ReflectionClass( '/var/www/classes/Base.php' );
$version = $reflection->getProperty('version')->getValue(  );

if( $version >= 1 )
{
    return true;
}
return false;
?>

BASE.PHP

<?php
class Base
{
    private $version = 2;
}
?>

【问题讨论】:

  • 在您尝试时告诉我们它是否有效?
  • 你想做什么?为什么不将其设为公共常量?
  • 如果您这样做是为了提高性能,您应该知道加载Reflection 比简单地创建类、获取属性然后删除它方式要重。
  • 伙计们,我需要在变量上使用一个数组。示例:$version = array(1,2,3,4,5,6,7,8,9,...);或整数值。

标签: php class reflection properties


【解决方案1】:

使用 getter 的受保护变量怎么样。

class Base {
    protected $version = array(2,3,4,5,6);
    public function __version() { return $this->version; }
}

你可以在任何你喜欢的地方实例化它,或者扩展它来添加功能。版本将在任何扩展中保持不变,因此请记住这一点。

使用就像$yourClass-&gt;__version() 一样简单。将其命名为类似于魔术方法的名称,以防止函数名称冲突。如果需要,可以通过扩展重新定义。

【讨论】:

    【解决方案2】:

    什么是静态的?它更简单:

    <?php
    class Base
    {
        public static $version = 2; // or $version = array(1,2,3);
    }
    
    if(is_array(Base::$version)) {
        print_r(Base::$version);
    } else {
        echo Base::$version;
    }
    
    ?>
    

    【讨论】:

    • ...并且要求您知道类的确切名称。
    • @SébastienRenauld 与您的解决方案一样。以下将输出“2”:class Base { public static $version = 2; } $o = new Base; print_r($o::$version);。你只需要知道它是静态的!
    • 如何回答获取文件并从中提取类的问题?
    猜你喜欢
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    相关资源
    最近更新 更多