Php 在静态方法中内部调用构造函数是个好主意吗?

Php 在静态方法中内部调用构造函数是个好主意吗?,php,oop,php4,static-members,Php,Oop,Php4,Static Members,比如说,我有一个本地化的date类,通常用于创建一个对象 $d = new Date(mktime(), 'MM-DD-YYYY', array('locale' => 'es')); 现在,如果我不想总是显式地创建一个新对象,而是想要一些更符合 <p>The date is <?php echo Date::formatDate( mktime(), 'MM-DD-YYYY', array('locale'=>'es') );?> </p>

比如说,我有一个本地化的date类,通常用于创建一个对象

$d = new Date(mktime(), 'MM-DD-YYYY', array('locale' => 'es'));
现在,如果我不想总是显式地创建一个新对象,而是想要一些更符合

<p>The date is <?php echo 
Date::formatDate( mktime(), 'MM-DD-YYYY', array('locale'=>'es') );?>
</p>

我没有开发很多类,我想知道这是否是OO语言中的常见模式。

问题在于Date
MyAdvancedDate
,您总是会得到父对象的实例,因为
self
\uuuu CLASS\uuuuu
总是会引用该方法实际所在的类。当然,除非在子类中显式重写该方法,否则这是正常的。这称为后期静态绑定


当我需要在5.2中实现LSB时,我通常会创建一个静态属性和相应的静态访问器,允许我更改由静态调用实例化的类。这里唯一的一点是,这仍然假设您只会使用一个decedent,因为更改static属性将全面更改它。根据项目/应用程序/模块/软件包的实际体系结构,它可以起到很大的作用。

更好的问题是:尽管PHP4已经正式失效,但仍然使用它是否是一个好主意;)我别无选择,只能支持它。@meder:我很好奇为什么。它已经下线了。虽然未部署widley,但5.3已发布,6 dev已全面启动。谁还在渴望php4支持?你没有说任何我不知道的事情,事实上,对于我们的客户来说,php4上还有十几个服务器,有几十个站点,我没有特权或权限说服他们立即更新到5,虽然今年至少有一段时间它在工作中。啊,企业巨兽效应:-)我知道它总是会创建一个实例,但不会那么糟糕,不是吗?我也不会扩展这个类。不,只要你意识到这一点就行。事实上,它是实现工厂方法和单例的常见实践。
class Date {
    function getLocalisedDate( $time, $format, $options ) {
        $obj = Date::Date(
            $time, $format, $options
        ); // invoke the constructor
        return $obj->get();
    }
};