PHP-向类添加方法
我正在寻找一种扩展PHP类以添加自定义方法的方法。我特别想向MongoDate添加一个日期格式方法(来自PHP MongoDB驱动程序) 我只是想,如果从Mongo collectio接收的MongoDate对象提供了一种方法使其可读,并且不需要调用函数或类来实现这一点,那么它会更干净PHP-向类添加方法,php,mongodb,pecl,Php,Mongodb,Pecl,我正在寻找一种扩展PHP类以添加自定义方法的方法。我特别想向MongoDate添加一个日期格式方法(来自PHP MongoDB驱动程序) 我只是想,如果从Mongo collectio接收的MongoDate对象提供了一种方法使其可读,并且不需要调用函数或类来实现这一点,那么它会更干净 $d = new MongoDate(); some_date_format($d); // the way it works now $d->format(); // the way it would
$d = new MongoDate();
some_date_format($d); // the way it works now
$d->format(); // the way it would be cleaner
有什么解决办法吗?从中继承
class myClass extends MongoDate{
public function format(){
}
}
那么就实施它吧:
$d = new myClass ();
some_date_format($d); // the way it works now
$d->format(); // the way it would be cleaner
扩展它。这是一个基本的OOP原则
class NewClass extends MongoDate {
public function newFunction(){
//Stuff here.
}
}
这将定义一个新类
NewClass
,它将继承旧的MongoDate
类的所有公共和受保护的属性和方法,还将包含newFunction()
函数。您不能更改PHP驱动程序返回日期的类型,因此lznogood&Truth的答案是您所能做的最好的。请阅读:-)同样,我希望从MongoCollection::find()接收对象代码>也会受到影响。如果我只是将从find接收到的MongoDate强制转换到我的新类中,它会工作吗?这里的适配器模式可能更合适。检查:谢谢,这个图案适合这个用途。但是我认为,因为PHP是如此的动态,所以有一种方法可以添加一个新的方法(我猜C++可以做到这一点,我不确定)我刚刚发现了,但是我猜这是个坏主意,RunKE-PECL的最后一个版本是2006。我还是要试试看!我考虑过,但这不会影响我从MongoCollection::find()接收的对象代码>@PhilippSpieß你真的应该把你尝试过的东西和结果写进你的问题里。这样人们就会知道如何更好地帮助你。尽管如此,请发布真正的代码,我们会看一看并提供帮助。@事实确实如此!修好了!谢谢@PhilippSpieß:除了创建一个装饰器
,它就是这样工作的。。。。如果只有Mongo
有方法重写类,比如PDO
的setAttribute(PDO_语句_类,'someClassExtendingPDOStatement')
。。。。但不幸的是,事实并非如此。