PHP子类没有父方法(可能的配置问题?)

时间:2014-05-23 11:58:34

标签: php oop inheritance

编辑:我添加screenshot实际错误,作为证明这就是发生的事情。

error message

请注意,$ post_id和$ id属性未定义,因为父Y_CF类具有魔术__get()方法,但同样 - 它在子类中不可用。


我已经遇到了很多问题(包括一个问题,其中PHP几乎只是忽略了一个包含文件的一部分,即使我在那里扔了一堆随机字符,这会导致致命的错误),但我终于找到了一个问题: 我有两个类 - 父类和主类。 父类是抽象的,并且有一个工厂方法,它根据传递给它的参数返回不同的子类。 奇怪的是,有了一个的子类 - 它没有父类的方法。我只发布相关的代码片段

abstract class Y_CF {
    // even if "public", it doesn't work
    protected function parse_attributes( $attributes, $core_atts = array() ) {
        $this->__settings['attributes'] = wp_parse_args( $core_atts, $attributes );
    }
}

class Y_CF_Text extends Y_CF {
    public function __construct( $settings ) {
        parent::__construct( $settings );
        // This is false
        var_dump( method_exists( $this, 'parse_attributes' ) );

        $this->parse_attributes( $this->attributes, array(
            'id' => "Y_field_{$this->id}",
            'class' => esc_attr( 'yotta-text-input ' . $this->class ),
            'type' => ! empty( $this->attributes['type'] ) ? $this->attributes['type'] : 'text',
            'value' => $this->format_value( $this->value ),
            'name' => $this->gen_name(),
        ) );
    }
}

正如您所看到的,我的主要课程是Y_CF,我用Y_CF_Text扩展它。

请注意,我已经在我的本地服务器(ubuntu 14)上尝试了此代码,它运行正常(应该如此)。

我怀疑问题出在服务器配置的某个地方,但我不知道在哪里。

到目前为止我做了什么:

  • 将PHP更新为5.5.12(问题也发生在5.3)
  • 已禁用opcache
  • 已禁用memcached
  • 重启php,nginx和整个服务器

所有这些都没有任何效果。

我也浏览了整个互联网,无法找到任何远程模仿我情况的东西。

1 个答案:

答案 0 :(得分:1)

嗯,我现在觉得非常倒霉:)

作为最后的手段,我开始将每个类放在他们自己的文件中。我到了主班,突然遇到以下错误:

<b>Parse error</b>: syntax error, unexpected end of file in <b>/path/to/site/wp-content/plugins/yotta-util/lib/class-y-cf.php</b> on line <b>291</b><br />

我喜欢什么?!所以,我开始浏览整个文件,最后我将问题指向了该类的单个方法。当我滚动到方法的末尾时,我看到了:

{some javascript code}
</script>
<?

注意缺少的&#34; php&#34;问号之后的部分 - 所有这些问题都来自哪里。单个开口标签输入错误。

现在,我通常不会使用短标签,但我猜大多数服务器已经配置好正确处理它们,所以我从来没有遇到过任何问题。但我现在正在处理的服务器已关闭它们。

不知何故,这不仅仅是触发致命错误或任何事情,而只是造成了令人费解的混乱局面。

所以最后 - 这只是一个错字让我头晕了至少6个小时。