对于php的static写见解

  内存分为四个区,当然,这四个区是逻辑上的分区,如果我们把它砸碎,(显然)我们是看不到四个区的,不像某些东西,比如西瓜,它能分为西瓜肉和西瓜皮,那些事看见的,而这个分区是不可见的。我们今天说的这个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();

   希望这些对大家有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值