我是php中OOP的忠实粉丝,但我觉得定义类方法的速度非常快。我在C ++中有一个非常好的OOP背景,我对它在那里的处理方式很满意,并且好奇如果有类似的方法在php中做到这一点。
更具体地说,这就是我的意思。我喜欢在C ++中如何定义类头(myclass.h),然后在实现文件(myclass.cc)中定义函数的实际细节。我发现这可以很容易地使用PHP中的接口复制,但我还没有找到一个很好的解决方案:
我喜欢根据访问它们的方式在不同的文件中用C ++组织我的代码,例如,可以在类外部调用的公共方法将在一个位置,而私有方法将在其他地方组织 - 这是个人偏好。
我试图在php中定义类方法,如:
private function MyPHPClass::myFunction(){ }
当定义不直接在类块({})内时,但我没有成功做到这一点。
我已经浏览过php.net上的所有页面,但是找不到这样的东西。我假设没有像这样的东西的支持,但我想我会问。
感谢
答案 0 :(得分:2)
你不能这样做。类声明类似于Java。
您必须将所有内容放在一个文件中,或者至少包含一些帮助程序类 - 它们只是您转发或调用的静态方法,或者将某些实现推迟到封装对象。您还可以使用__call
和__callstatic
魔术方法来减少存根的大小,但这仅适用于公共方法,我建议您避免使用魔术方法。
编辑:通过使用魔术方法,我的意思是这样的:
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
}
class DBDriver_MySQl extends Database implements IDatabase
{
public function connect($dns = '')
{
//Connection logic.
}
public function disconnect($flushDns)
{
//Disconnect Login
}
}
希望这就是你要找的东西。