美文网首页
php的静态成员static

php的静态成员static

作者: PENG先森_晓宇 | 来源:发表于2020-01-21 17:18 被阅读0次

静态变量静态方法常量是随着类的加载而加载的,而其他普通变量是随着类的实例化而加载的。

  • 在类中使用self关键字调用静态变量或者静态方法,在类外使用类名调用静态变量和静态方法。
<?php
namespace App\learn;

class Home
{
    public static $old=1;

    public $num;

    public function user()
    {
        return self::$old;
    }
}
echo Home::$old."\n";
$home=new Home();
echo $home->user();
  • 静态方法只能调用静态变量或者常量,普通方法内可调用静态变量和常量。
    1)静态方法,静态变量和常量是在类加载时候会一同加载,以至于在静态方法中可以获取到静态变量和常量,所以在静态方法中是可以使用关键字self调用静态变量或者常量的。
    2)普通方法,普通变量都是在类实例化后才加载的。类肯定是先加载后被实例化,所以在普通方法中可以调用静态方法,静态变量和常量的。
    3)静态方法中是不能通过this关键字来调用普通变量和普通方法,因为普通成员得类实例化后才可以调用得。
    4) this就是指类的对象。所以在静态方法中只能调用静态变量或者常量,不能使用$this关键字只能使用self::关键字来调用。
  • 静态方法,静态变量和常量称为类属性,普通方法,普通变量称为对象属性
  • 在传统php中静态变量在一次请求中是常驻内存的,在swoole中就更不用说了,静态变量会伴随进程的生命周期,只要变量不销毁就一直存在内存中。普通变量不管在传统php还是在swoole中只在一次请求中住内存的,请求结束,普通变量将会从内存中释放。
    对象属性是随着对象的创建而创建的,php中一次请求内可以多次实例化对象,则类中的对象属性也会重置。如果在传统php中的一次请求无论实例化对象多少次,类属性是不会重置的,但是只限于一次请求内,因为传统php在请求结束后会释放所有资源。如果在swoole中,类属性将不会局限于在一次请求中,而是在整个生命周期内都是可用的。

如下是传统php代码

<?php

namespace App\learn;

class User
{
    public static $a=0;
    public $b=0;

    public function home()
    {
        $this->b++;
        self::$a++;
    }
}

$user=new User();
$user->home();
echo "b是".$user->b."\n";
echo "a是".User::$a."\n";
$user=new User();
$user->home();
echo "b是".$user->b."\n";
echo "a是".User::$a."\n";

结果为

b是1
a是1
b是1
a是2

https://mp.weixin.qq.com/s/nTEkdrHM2bv3aRdj4mEQeg。为什么该文章的对象属性并没有释放?而是能一直复用呢?因为该类使用swoole的启动程序,php MyServer.php后该进程是一直在挂起的,也就是对象并没有释放,也就解释了其中对象属性也没释放了。

相关文章

  • php的静态成员static

    静态变量,静态方法和常量是随着类的加载而加载的,而其他普通变量是随着类的实例化而加载的。 在类中使用self关键字...

  • C#学习笔记<五> static

    1 静态成员 static成员中不能调用非static成员非static成员中可以调用static成员静态成员类似...

  • static关键字

    static说明 static: 静态的,使用static修饰的成员称为静态成员、类成员static修饰的属性称为...

  • PHP使用static关键字声明静态属性和静态方法

    在PHP中,通过static关键字修饰的成员属性和成员方法被称为静态属性和静态方法。 静态属性和静态方法不需要在被...

  • 18-static成员

    静态成员(static) 静态成员:被static修饰的成员变量/函数,可以称为静态成员。 可以通过对象(对象.静...

  • 类型转换、static成员、单例模式

    静态成员(static) 静态成员:被static修饰的成员变量\函数可以通过对象(对象.静态成员)、对象指针(对...

  • static,const,拷贝,友元,模板

    静态成员 static 静态成员:被static修饰的成员变量\函数可以通过对象(对象.静态成员)、对象指针(对象...

  • Java_basic_3: static, this 关键字

    static static 静态变量 Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所...

  • java入门教程(五)static、this、final关键字

    static static为静态的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块。在stati...

  • 静态成员

    静态成员 静态成员是被static关键字修饰的属于类的,通过类名.静态成员来访问 实例成员是没有被static关键...

网友评论

      本文标题:php的静态成员static

      本文链接:https://www.haomeiwen.com/subject/bfajnctx.html