我想知道是否在类体之外定义了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中两者之间没有功能差异,它只是一个风格问题。
答案 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)
没有。您可以认为“声明”和“定义”在该问题中可以互换。