在课堂外定义的方法?

问题描述:

我想知道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中两者之间没有功能差异,它只是一个风格问题。

+0

这几乎是相同的问题 – 2009-08-14 20:59:21

+0

请定义“declare”和“define”之间的区别;) – matpie 2009-08-14 21:02:01

+0

我不知道这个问题的答案,但我同意在其他问题中错误地使用* declare *使我很难知道如何解释答案。迄今为止的答复没有将其清除。 – Darryl 2009-08-14 21:04:55

具有在头文件中方法的声明分开,它们的实现是,据我所知,相当独特的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/

本身 PHP不支持的功能就是这样,但因为PHP5.4可以动态添加方法反对。作为一个例子,你可以看看这个:https://github.com/ptrofimov/jslikeobject