gpt4 book ai didi

php OOP 函数声明

转载 作者:行者123 更新时间:2023-12-04 06:52:24 25 4
gpt4 key购买 nike

我是 php 中的 OOP 的忠实拥护者,但我觉得定义类方法的速度如此之快。我在 C++ 中的 OOP 方面有很好的背景,我对那里的处理方式非常满意,并且很好奇是否有办法在 php 中进行类似的操作。

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

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

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

private function MyPHPClass::myFunction(){ }

当定义不是直接在类 block ({})内时,但我没有成功这样做。

我已经浏览了 php.net 上的所有页面,但找不到类似的东西。我假设不支持这样的事情,但我想我还是会问。

谢谢

最佳答案

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

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

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

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

关于php OOP 函数声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2939601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com