类中的构造函数不能设为私有,但__isset()、__unset()、__set()、__get()教程上说最好设为私有。
那其他系统函数如__toString()、__call()、__clone()等,都是对象直接调用的,他们应该设置成什么权限呢?
多谢

解决方案 »

  1.   

    PHP reserves all function names starting with __ as magical. It is recommended that you do not use function names with __ in PHP unless you want some documented magic functionality. 
      

  2.   

    回2楼,我现在不是想知道该不该用魔力函数,我是想知道如果用的话该用什么权限。
    回3楼,为什么是public呢?__isset()等函数不也是自调用的吗,它们不都是private吗
      

  3.   

    public, protected, private三个不同的关键字用来将属性和方法的作用范围做进一步的区分,带有private关键字的属性和方法,只有所在的类中的方法才能调用;带有protected关键字的属性和方法,除了自己以外,自己的父类和子类中的方法也可以调用;带有public关键字的属性和方法,则可以从实例化以后的对象中进行调用,这样做最大的好处给所有的属性和方法增加了一些描述的特征,更便于整理和组织代码的结构
    详细出处参考:http://www.jb51.net/article/13982.htm
      

  4.   

    这些应该根据你自身的需要来定,没有什么一定要用什么方式想__get() 如果你不设置的话,仅仅是$this->var(没有声明var这个变量)不会有内容(或者打开报错的时候会有错误提示),但是这个__get()设置什么权限好想没有关系!但是如果你实现了__get,又要禁止外部调用的话,如上例的$this->var,那么__get()就要是private或者protected属性其他魔术函数一样,只要明确意味某些功能不能外部调用,那么才需要在实现具体内容上声明他的私有属性,否则都应该是public!
      

  5.   

    直接写成 pulbic 就行了。
      

  6.   

    你看的是什么教程?实际上, 魔术函数一般都是设为public,你可以试一下设成private就知道了....
      

  7.   

    看的《细说PHP》,我只是怕把魔术函数设成private了会影响这个函数发挥功能,因为书上说构造函数一定不能设为private,但构造函数和魔术函数一样都是对象自调用的,所以我就不知道是不是其他魔术函数也不可以设成private。
      

  8.   

    事情是这样的.....构造函数是可以设为prviate的.....具体例子可以搜索  "php 单件模式" 其它魔术函数的情况各有不同,
    比如__clone也是可以设为private的, 具体例子可以搜索 "php 单件模式" , 哈哈, 和上面一样,比较规范的单件的例子会包含一个私有的__clone而__set/__get,应该是设为public, 因为这两个就是让从外部操作内部私有变量时使用....如果你非要设成private,php会报一个warning, 但是照样把它当作public用. 你可以试试其它的,我没测试,不敢乱说,不过大体差不多,你可以自己试一下所以....光看书不行,尤其是某些书:)