在课堂外定义的方法?
我想知道php方法是否曾经在C++中完成过,因为它们通常是在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中两者之间没有功能差异,它只是一个风格问题。
具有在头文件中方法的声明分开,它们的实现是,据我所知,相当独特的C/C++。我知道所有其他语言都没有它在所有,或只在有限的形式(如Java和C#接口)
号你可以考虑“声明”和“定义”要在这个问题互换。
这是可能的,但是非常非常哈克,不推荐。没有理由这样做。
首先,在PHP中,所有类的方法必须在class
结构(class x { }
)中定义和实现。它与C++没有任何区别,其中的实现(*.cpp
)与定义(*.h
)分开。
这是一个可怕的,丑陋的,黑客工具,不应该被使用。但是,你要求它!
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
的引用。
我偶然发现了这个问题,同时寻找一种方式,以独立的政治宣言和执行类方法。为什么?为了代码可读性。当声明位于单独的文件中或者位于类文件的顶部时,有人希望使用该类,则不必通过整个实现来查找提供的方法。
我找到一些有用的东西,但:PHP接口类。我不认为它们是为它设计的,但它们的目的是:接口类定义所有方法,然后“真实”类实现它们。这里有一个关于它的文章:
http://www.davegardner.me.uk/blog/2010/11/21/why-you-should-always-use-php-interfaces/
这几乎是相同的问题 – 2009-08-14 20:59:21
请定义“declare”和“define”之间的区别;) – matpie 2009-08-14 21:02:01
我不知道这个问题的答案,但我同意在其他问题中错误地使用* declare *使我很难知道如何解释答案。迄今为止的答复没有将其清除。 – Darryl 2009-08-14 21:04:55