课外定义的方法?

时间:2009-08-14 20:56:21

标签: php c++ class oop

我想知道是否在类体之外定义了php方法,因为它们通常是在C ++中完成的。我意识到这个问题与Defining class methods in PHP相同。但我相信他最初的问题是“声明”而不是“定义”所以所有答案似乎都不合适。

更新

可能我对定义和声明的想法存在缺陷。但是通过在类体之外定义,我的意思是与C ++相当的东西

class CRectangle {
    int x, y;
  public:
    void set_values (int,int);
    int area () {return (x*y);}
};

void CRectangle::set_values (int a, int b) {
  x = a;
  y = b;
}

php代码的所有示例都具有类体内部的代码,就像C ++内联函数一样。即使在PHP中两者之间没有功能差异,它只是一个风格问题。

7 个答案:

答案 0 :(得分:6)

这是一个永远不应该使用的可怕,丑陋的黑客攻击。但是,你要求它!

class Bar {
    function __call($name, $args) {
        call_user_func_array(sprintf('%s_%s', get_class($this), $name), array_merge(array($this), $args));
    }
}

function Bar_foo($this) {
    echo sprintf("Simulating %s::foo\n", get_class($this));
}

$bar = new Bar();
$bar->foo();

我做了什么?无论如何,要添加新方法,只需在其前面加上类的名称和下划线。函数的第一个参数是对$this的引用。

答案 1 :(得分:4)

据我所知,将头文件中的方法声明与其实现分开是非常独特的C / C ++。我知道的所有其他语言都没有,或者只有有限的形式(例如Java和C#中的接口)

答案 2 :(得分:2)

我在寻找分离类方法的声明和实现的方法时偶然发现了这个问题。为什么?为了代码可读性。当声明在单独的文件中或在类文件的顶部时,想要使用该类的人不必涉及整个实现以找出提供的方法。

我确实发现了一些有用的东西:PHP接口类。我不认为它们是为它设计的,但它们的目的是:接口类定义所有方法,然后“真正的”类实现它们。这是一篇关于它的文章:

http://www.davegardner.me.uk/blog/2010/11/21/why-you-should-always-use-php-interfaces/

答案 3 :(得分:1)

这是可能的,但非常,非常hacky,不推荐。没理由这样做。

答案 4 :(得分:1)

首先,在PHP中,必须在class结构(class x { })内定义和实现所有类方法。它绝不像C ++那样将实现(*.cpp)与定义(*.h)分开。

答案 5 :(得分:1)

本机 PHP不支持此类功能,但自PHP5.4起,您可以动态添加方法到对象。例如,您可以查看以下内容:https://github.com/ptrofimov/jslikeobject

答案 6 :(得分:0)

没有。您可以认为“声明”和“定义”在该问题中可以互换。