php OOP函数声明

php OOP function declarations

我非常喜欢PHP中的OOP,但我觉得定义类方法的速度太快了。我在C++中有一个很好的OOP背景,我对它在那里的处理非常满意,我很好奇在PHP中是否有类似的方法。

更具体地说,我的意思是。我喜欢C++中如何定义类头(MyCase.h),然后定义实现文件(MyCase.cc)中函数的实际细节。我发现使用PHP中的接口可以很容易地复制这一点,但是我还没有找到一个好的解决方案:

我喜欢基于C++如何在不同的文件中组织我的代码,根据它们是如何访问的,例如,可以调用类之外的公共方法将位于1位,而私有方法将组织在其他地方——这是个人偏好。

我试图用php定义类方法,比如:

1
private function MyPHPClass::myFunction(){ }

当定义不直接在类块()内时,但我没有成功完成这项工作。

我浏览过php.net上的所有页面,但找不到类似的内容。我假设没有人支持这样的事情,但我想我还是会问。

谢谢


你不能这样做。类声明是类似Java的。

您必须将所有内容都放在一个文件中,或者至少有一些助手类——它们只是您转发或调用的静态方法,或者是您将一些实现推迟到封装的对象。你也可以使用__call__callstatic魔法方法来减少你的存根的大小,但这只适用于公共方法,我建议你避免使用魔法方法。

Edi2:正如罗伯特皮特在评论中指出的,您应该考虑将功能划分为几个类的替代策略。它还有一个额外的优点,可以使您的代码更加解耦。如果需要的话,您仍然可以统一fa后面的几个类的功能?艾德。

编辑:通过使用魔法方法,我的意思是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class MyClassHelper {

    public function method_one(array $args) {
        ...
    }

    public function method_two(array $args) {
        ...
    }
}

class MyClass {
    /**
     * @var MyClassHelper
     */

    private $helper;

    private static $ALLOWED_METHODS = array("method_one" => NULL,
       "method_two" => NULL);

    public function __call($name, $arguments) {
        $name = strtolower($name);
        if (array_key_exists($name, self::$ALLOWED_METHODS) {
            $helper->$name($arguments);
        }
        else
            throw new Exception(...);
    }
}

我建议您避免这种情况,这有许多陷阱(处理引用,没有代码完成)。


我不是一个真正的C++/C程序员,但是PHP接口可以给你一个例子,看看这是否有用。

接口

1
2
3
4
5
interface IDatabase
{
   public function connect($dns = '');
   public function disconnect($flushCache = false); //Do not use braces, Code free in interfaces
}

号数据库抽象基类

1
2
3
4
abstract class Database
{
   //Some driver logic here to laod mysql,oracle etc
}

MySQL驱动程序

1
2
3
4
5
6
7
8
9
10
11
class DBDriver_MySQl extends Database implements IDatabase
{
   public function connect($dns = '')
   {
     //Connection logic.
   }
   public function disconnect($flushDns)
   {
     //Disconnect Login
   }
}

希望这是你想要的。