课外定义的方法?

zen*_*nna 8 php c++ oop class

我想知道是否在类体之外定义了php方法,因为它们通常是在C++中完成的.我意识到这个问题与在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;
}
Run Code Online (Sandbox Code Playgroud)

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

Jus*_*iey 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();
Run Code Online (Sandbox Code Playgroud)

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


tho*_*ulb 5

我在寻找一种分离类方法的声明和实现的方法时偶然发现了这个问题。为什么?为了代码的可读性。当声明位于单独的文件中或位于类文件的顶部时,想要使用该类的人不必费力地遍历整个实现来找出提供了哪些方法。

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

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


Mic*_*rdt 4

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