• php的static关键字和全局变量


    1.全局变量[其不属于面向对象的思想,因为其放在对象之外的],面向对象有一个特点,其实封装的,php希望其所有的成员都应该放在类中;php的面向对象是基于面向对象的,不是纯粹面向对象的;也就是其可以面向对象编程,也可以不面向对象编程。

         使用global定义全局变量,其放在内存的全局区/静态区中,在代码中其是放在class外面的。

    global $global_a;

    $global_a=8;//只能这样给全局变量赋值,否则会报错

    //在函数中使用全局变量

    function test(){

    global $global_a;//global才能得到$a的地址

    $global_a=90;//找到外层的$a的地址位置并将其值改成90

    }

    test();

    echo $global_a;//输出90,如果函数中在使用全局变量时没有使用global关键字的话,输出的值是8

    2.static关键字的理解

    注意:

        a.要在类中定义static变量

        b.使用static变量可以在类中也可以在类外使用(静态对象不会依赖于对象的创建而创建,也就是说在访问static变量时,不用去创建对象就可以直接方法:

    class Person{

    public static $a=90;

    public function __construct(){

    echo "你好";

    }

    }

    echo Person::$a;

    //没有new Person();但是还是可以得到$a等于90。在php中new关键字才会调用__construct方法,如果没有new就不会调用该方法;因此在这里“你好”不会输出

    class Child{
    public $name;
    public static $num=0;//定义static属性
    function __construct($cname){
    $this->name=$cname;
    }
    public function play_game(){
    //使用static属性,在类中,1.self::$类变量名 2. 类名::$类变量名(在类外部才用第二种方式使用)
    self::$num+=1;//在类中使用static变量
    echo $this->name."加入了玩游戏<br/>";

    }

    }
    $child1=new Child('倪华');
    $child1->play_game();
    $child2=new Child('万鑫');
    $child2->play_game();
    $child3=new Child('盛盛');
    $child3->play_game();
    echo Child::$num;//在类外使用static属性

    3.static方法(静态方法,注意:在类方法中不能使用非静态属性[变量],在使用静态变量时往往采用静态方法

         静态方法也叫类方法,静态方法是属于所有对象的实例的,其定义形式为:[修饰符] static  function 方法名(){}

         在类中使用类方法:self::类方法名   或者    类名::类方法名

         在类的外部使用:类名::类方法名  或者  对象名->类方法名


    class Student{
    public $name;
    public static $fee;
    function __construct($name){

    $this->name=$name;

    }
    public static function enter_school($fee){
    self::$fee+=$fee;
    }

    static function getFee(){
    return self::$fee;
    }
    }
    $stu=new Student("张三");
    Student::enter_school(200);
    $stu=new Student("张三333");
    $stu->enter_school(300);
    echo "总费用是".$stu->getFee();

    静态方法的特点:

            静态方法只能操作静态变量

           静态方法不能操作非静态变量

          普通成员方法可以操作静态变量也可以操作普通变量,但是不能访问静态方法,静态方法也不能访问静态方法

          

  • 相关阅读:
    BZOJ 1057 悬线法求最大01矩阵
    POJ 2248
    SPOJ
    51NOD
    2017-2018 ACM-ICPC, NEERC, Moscow Subregional Contest J. Judging the Trick
    POJ 1379 模拟退火
    POJ 2420 模拟退火
    Frontend 事后诸葛亮
    【Frontend】Alpha Review 展示博客
    ASE19 团队项目 alpha 阶段 Frontend 组 scrum5 记录
  • 原文地址:https://www.cnblogs.com/tangyue/p/3745251.html
Copyright © 2020-2023  润新知