使用私有类函数/变量的PHP静态方法

时间:2010-07-28 21:41:01

标签: php static methods

如果我在类中编写公共静态方法,即......

public static function get_info($type){
        switch($type){
            case'title':
                self::get_title(); 
                break;
        }
    }

我必须将我的get_title()函数编写为public ...

public static function get_title(){
        return 'Title';
    }

否则我收到错误:

Call to private method Page::get_title()

这让我感觉好像函数get_info()本质上是多余的。我希望能够从我的类中的静态方法调用私有方法进行验证。这不可能吗?

PHP> 5.0分btw。

!#######编辑解决方案(但没有回答问题)#########!

如果你很好奇,我的解决方法是在静态函数中实例化静态函数的类。

所以,类名是Page I会这样做......

public static function get_info($type){
            $page = new Page();
            switch($type){
                case'title':
                    $page->get_title(); 
                    break;
            }
        }
  public function get_title(){
            return 'Title';
        }

2 个答案:

答案 0 :(得分:9)

这实际上没问题,据我所知,这里没有不可能。您的静态get_title()方法可以是私有的 - 或者我错过了什么?如果您的静态方法get_info()get_title()在同一个类中 (无论是否静态),那么您的{{1} }方法可以是私有的,您的代码仍可正常工作而不会出错。 get_title()在类中调用get_info() - 静态。 get_title()不需要在您的示例中公开,除非需要从静态类外部访问。

Access(public,protected和private)适用于静态类(所有方法都是静态的)以及类实例。

编辑:您无需借助实例化该类来实现私有访问...

get_title()

答案 1 :(得分:2)

是的,这是不可能的 - 非静态方法需要一个对象来读取数据,而静态方法的一点是它没有附加这样的对象。你可以想到每个非静态方法都传递一个隐式参数,即对象。如果从静态函数调用,则根本没有值将该值传递给方法。

<强>更新 你可以拥有私有静态函数 - 我不确定你的问题是否可能涉及对私有和静态作为互斥概念的轻微误解