Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-向类添加方法_Php_Mongodb_Pecl - Fatal编程技术网

PHP-向类添加方法

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

我正在寻找一种扩展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 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')
。。。。但不幸的是,事实并非如此。