陈敬秀

陈敬秀的博客

他的个人主页  他的博客

php中使用oop的静态方法

陈敬秀  2013年03月08日 星期五 10:24 | 1599次浏览 | 0条评论

在使用静态方法和静态属性的过程中容易犯错的地方,再此记录....

   oop中静态属性和方法的使用,具有几方面的好处,一方面可以提高代码的性能,另一方面调用起来也很方便,而且通常结合一些设计模式,比如单例模式,工厂模式使用,这样才可以对资源更好的管理,而不会出现大量的冗余和资源的浪费。

   几大误区:

    1.静态属性只可以在静态方法中使用,其实在非静态方法中,依然可以使用

    2.静态方法中调用的方法必须是静态方法,其实不然,比如

    class  User{

       static public function getUser(){

           $user = new User();

           $user->find();

      }

       public function find(){

          return "kivmi";

       }

   }

   这种调用方式的缺陷是,在静态方法内部必须实例化自己,才可以调用类的其他方法,然而如果使用静态方法里,只能使用静态的方法的调用,则会让人吐槽

  class User{

      static $instance;

      static $id;

      private  function __construct(){

      }

      static function getInstance(){

        if(null == self::$instance){

            self::$instance = new self();

        }

        return self::$instance;

     }

    //////////////////////这段代码容易犯错/////////////////////////

     static function getUser(){

            self::$instance::find();   //这里有错,不能使用::find()调用该方法,而不得

            //不使用 User::find()或者self::find()进行调用

     }

   ///////////////////////////////////////////////////////////////////////////////////////

   static  function find(){

           return "kivmi";

    }

    private  function getId(){

        return self::$id;

  }

}

调用 User:getInstance()->getId();

User::getUser();User::find();

静态方法调用有一个特点就是,使用类名::方法名的方式调用方法,而使静态方法之间的调用具有一定的约束,这种约束显得不自然,但是从使用上还是很简单的。

3.类的静态方法和类的对象之间的交互,也就是内存中对象之间的引用没能很好的理解

 

 

评论

我的评论:

发表评论

请 登录 后发表评论。还没有在Zeuux哲思注册吗?现在 注册 !

暂时没有评论

Zeuux © 2024

京ICP备05028076号