对于php的static写见解

来源:互联网 发布:中电数据 江海 编辑:程序博客网 时间:2024/05/21 14:09
  内存分为四个区,当然,这四个区是逻辑上的分区,如果我们把它砸碎,(显然)我们是看不到四个区的,不像某些东西,比如西瓜,它能分为西瓜肉和西瓜皮,那些事看见的,而这个分区是不可见的。我们今天说的这个static是在栈内存、堆内存、初始化静态段、代码段这四个区中的初始化静态段。
  在php中,当你对于要用一个类生成多个对象的时候,你可以把某些共同的量用static做前缀,这样可以节省很多内存,因为你每产生一个新对象的时候,都会相应的在堆内存中开辟一个空间,来存放这个对象,因此当有一个共同的成员被多次使用到的时候,我们可以把它用static来声明,这样它会被存放在初始化静态段内存中,从而能够提高效率,也能少占用内存。那么它是何时产生,何时在内存中被释放的呢,当你在声明这个类的时候,它便已经在在初始化静态段里占用了相应的内存,而初始化静态段里的内存只有当php脚本结束的时候才会被释放,还有一个要注意的就是如果你用了static声明了一个属性,那么你是没有办法通过直接读值去读取它的值的(echo $duixiang -> country;)也就是没有办法这样去读取,如果要读它的值,只能通过 self::$country这种方式去读。
  当然,在php中,除了对于类中的属性可以用static声明之外,类中的方法也是可以用static来声明的,这样声明的方法,可以通过产生对象来进行调用,但还有个更具备效率的方法就是通过类进行调用,其实对于方法而言,它们本来就存放在代码段中,已经被共用了的,但加了static后,它就被存放在了初始化静态段中,这样我们可以通过类进行调用,省去了声明对象这个部分,因此大大提高了效率。因此,我们有这样的建议,能使用到static的都尽量用到static来声明,有些公司甚至是规定这样做。不过,这个好处虽然很大,但却有个弊端,就是你用static进行声明的函数,它只能使用到用static来声明的值,也就是只能用到初始化静态段的值,不能用到那些public这些声明的值,所以这是个缺点。
  这些便是我对于static的一些使用和建议。
class Person{
        public $name;
        public $age;
        public $sex;
        public static $country = "中国";
        function __construct($name,$age,$sex){
            $this->name = $name;
            $this -> age = $age;
            $this ->sex =$sex;
        }
        function run(){

        }
        static function say(){
            //echo '我的名字是:'.$this->name.',我的年龄是:'.$this->age.',我的性别是:'.$this->sex.',我的国家是:'.self::$country.'。
';
            echo '我的国家是:'.self::$country.'。
';
        }
        function __destruct(){

        }
    }
     //声明一个对象
     $a = new Person("zhang",20,"man");
    //尝试通过对象直接读country的值(当然,这样子是对不到的,系统会报错)
     echo $a->country.'
';
   //我的方式,通过函数读,因为在上面的函数用到了self::$country,所以我就不多写了
    $a = new Person("zhang",20,"man");
    $a->say();
    //当然,我们可以通过类直接调用到方法,这样也是可行的
    Person::say();

   希望这些对大家有所帮助。
原创粉丝点击