php OOP函数声明

时间:2010-05-30 17:31:51

标签: php oop function

我是php中OOP的忠实粉丝,但我觉得定义类方法的速度非常快。我在C ++中有一个非常好的OOP背景,我对它在那里的处理方式很满意,并且好奇如果有类似的方法在php中做到这一点。

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

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

我试图在php中定义类方法,如:

private function MyPHPClass::myFunction(){ }

当定义不直接在类块({})内时,但我没有成功做到这一点。

我已经浏览过php.net上的所有页面,但是找不到这样的东西。我假设没有像这样的东西的支持,但我想我会问。

感谢

2 个答案:

答案 0 :(得分:2)

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

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

EDI2:正如RobertPitt在评论中指出的那样,你应该考虑在几个类之间划分功能的替代策略。它具有额外的优势,它可以使您的代码更加分离。如果需要,您仍然可以统一幕后几个类的功能。

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

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(...);
    }
}

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

答案 1 :(得分:1)

我不是一个真正的C ++ / C#程序员,但php中的界面我可以给你一个例子,看看这是否有帮助。

接口

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

数据库抽象基类

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

MySql驱动程序

class DBDriver_MySQl extends Database implements IDatabase
{
   public function connect($dns = '')
   {
     //Connection logic.
   }
   public function disconnect($flushDns)
   {
     //Disconnect Login
   }
}

希望这就是你要找的东西。