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的。
您必须将所有内容都放在一个文件中,或者至少有一些助手类——它们只是您转发或调用的静态方法,或者是您将一些实现推迟到封装的对象。你也可以使用
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 } } |
。
希望这是你想要的。