2012-12-11 47 views
2

PHP与此代码没有问题:)我可以使用系统函数名称(在一个类中)来定义我自己的函数吗?

interface IDateTimeProvider 
    { 
     public function date($format); 
     public function time(); 
    } 

    class DateTimeProvider implements IDateTimeProvider 
    { 
     public function date($format) 
     { 
      return date($format); 
     } 
     public function time() 
     { 
      return time(); 
     } 
    } 

日期(和时间()被在类中定义的功能......所以,只要我把它在一个类中,我可以说出我的函数与预先存在的PHP函数,如date(),time()或ob_start()?

+2

您也可以使用[命名空间](http://php.net/namespaces)。 – Wiseguy

+0

目前还不清楚你在这里问什么。你已经知道你可以在一个班级中“隐藏”功能。 –

+0

对不起,是的,问题是模糊的。我做意味着要问的是:“哎,我注意到这一点,多少有些令人吃惊,那么什么是这背后的故事吗?”我已经有了答案,那告诉我这:) –

回答

1

您可以在课程内做到这一点,因为它们的真实姓名在内存中将类似于IDateTimeProvider::date。这叫做包装

如果你想出来的一类,你必须使用命名空间这样的:

namespace MyNamespace; 
function time(){ 
    return \time(); 
} 

,并在另一个文件中,你将与\MyNamespace\time();

使用它对于给定的功能,它是毫无用处的,我会记住你的DateTime存在于PHP中,并且比时间戳和他的生态系统更强大。

2

是的,在类中使用名称date,time等功能没有任何问题,因为它们不会与具有相同名称的预定义函数冲突。

甚至可以在不同的namespaces(例如C#中的名称空间或Java中的包等)中使用相同名称的类。

也可以使用名称空间来定义具有该名称的函数。例如:

namespace myNamespace; 


function time() //function defined in 'myNamespace' 
{ 
    return \time(); // native function time(); 
} 

注:同时使用命名空间访问“默认”定义的函数和类的命名空间,你需要在这些函数和类(如\stdClass\time()\strpos(),等前面加\ )。

0

是的,你可以!

你试过运行你的代码吗?

here的代码的键盘例子,它的正常工作

相关问题