php——18-静态属性和静态方法(static)

版权声明:未经同意,不得随意转载转载 https://blog.csdn.net/lucky541788/article/details/82949590

静态属性和静态方法(static)

  • 静态属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此这类属性或方法也称为“类属性”或“类方法”;
  • 静态属性和方法,在类被调用(类被创建或者类中的任何静态成员被调用)时创建。
  • 静态属性,在内存中只有一份,为所有的实例共用
  • 静态方法不能调用非静态属性,也不能使用$this获取非静态属性的值

调用语法以及注意事项

  • 如果访问控制权限允许,可不必创建该类对象而直接使用类名加两个冒号“::”调用静态属性和静态方法;
  • 调用语法:类名[或self]::静态属性名(静态方法名),而且在类内部强烈建议用 self:: 来调用。
  • 当一个类中有非静态方法被 self:: 调用时,系统会自动将这个方法转换为静态方法。
  • 静态方法不能调用非静态属性,也不能使用 $this 获取非静态属性的值。
<?php
//静态属性和静态方法 外部调用
class Person
{
    public $name = 'tom';
    public static $age = 22;//静态属性

    public static function intro()
    {
        echo 'i am static func<br>';
    }
}

 /*
 $cc = new Person();
 echo $cc->name;//tom
 */

//类名::静态 属性/方法
echo Person::$age . '<br>';//22
Person::intro();//i am static func
<?php
//静态属性 内部调用
class Person
{
    public $name = 'tom';
    public static $age = 22;//静态属性

    public function intro()
    {
        //echo 'My age is '.Person::$age.'<br>';
        echo 'My age is '.self::$age.'<br>';//强烈建议使用这种方式(防止类名一改,内容全要改)
    }

    //静态属性设置和获取(setAge和getAge)
    public function setAge($age=44){
        //Person::$age=$age;
        self::$age=$age;
    }

    public function getAge(){
        //echo 'My age is '.Person::$age.'<br>';
        echo 'My age is '.self::$age.'<br>';
    }
}


 $cc = new Person();
$cc->intro();//My age is 22
$cc->setAge(55);
$cc->getAge();//My age is 55
<?php
//静态方法 内部调用
class Person
{
    public $name = 'tom';
    public static $age = 99;

    public static function intro()
    {
        // echo 'My name is ' . $this->name . '<br>';//静态方法中不能使用 $this
        echo 'My age is ' . self::$age . '<br>';//My age is 99
        self::enjoy();//interesting
        /*
        self::enjoy1();//hello world
        //尽管可以打印,但是会报错而且公共方法含有引用 $this 则无法打印且报错
        //所以静态方法里,只使用静态方法和静态属性
        */
    }

    public static function enjoy()
    {
        echo 'interesting';
    }

    public function enjoy1()
    {
        echo 'hello world!';
        echo 'name is ' . $this->name . '<br>';
    }
}

Person::intro();
  • 任何一个静态变量都可看做全局变量
<?php

function enjoy()
{
    $num = 0;
    echo '$num = ' . $num++ . '<br>';
}

enjoy();//$num = 0
enjoy();//$num = 0
enjoy();//$num = 0
enjoy();//$num = 0

//任何一个静态变量都可看做全局变量
function enjoy0()
{
    static $num = 0;
    echo '$num = ' . $num++ . '<br>';
}

enjoy0();//$num = 0
enjoy0();//$num = 1
enjoy0();//$num = 2
enjoy0();//$num = 3

猜你喜欢

转载自blog.csdn.net/lucky541788/article/details/82949590