PHP自学之路------static,global用法

1、下面是全局变量使用:

<?php

    //定义,全局变量

	global $global_nums;

	//赋值

	$global_nums=0;

	class Child{

		public $name;



		function __construct($name){

			$this->name=$name;

		}



		public function join_game(){

			global $global_nums;

			$global_nums+=1;

			echo $this->name."加入堆雪人游戏<br/>";

		}

	}

	//创建3个小孩

	$child1=new Child("aaa");

	$child1->join_game();

	$child2=new Child("bbb");

	$child2->join_game();

	$child3=new Child("ccc");

	$child3->join_game();

	

	echo $global_nums;

?>

注意:全局变量只能先定义,再进行初始化,不能直接初始化,或初始化和定义写到一起。

2、static 静态变量使用
<?php

    

	class Child{

		public $name;

                public static $nums=0;

		function __construct($name){

			$this->name=$name;

		}



		public function join_game(){

			//类内部访问 2中如下

			//Child::$nums+=1;

			self::$nums+=1;

			echo $this->name."加入堆雪人游戏<br/>";

		}

	}

	//创建3个小孩

	$child1=new Child("aaa");

	$child1->join_game();

	$child2=new Child("bbb");

	$child2->join_game();

	$child3=new Child("ccc");

	$child3->join_game();

	$child4=new Child("ddd");

	$child4->join_game();

	//外部访问

	echo Child::$nums;

?>

静态变量只能定义在类中,使该类的所有对象共享的变量,任何一个该类的对象去访问他时,取到的数值都是一样的,同样任何一个该类的变量去修改他时,修改的都是同一个变量。

如何访问静态变量:

在类外部:类名::$类变量名

在类内部:self::$类变量名  或者   类名::$类变量名

具体在内存的分配情况见下图:

PHP自学之路------static,global用法

下面是简单的实例,加深对上面的理解:

<?php

   /*

   //第一种情况

   class Person{

	   public static $a=90;

   }

   echo Person::$a;

   // 输出不会报错打印:90

*/

 /*

   //第二种情况“

   class Person{

	   public static $a=900;



	   public function __construct(){

           $this->a=45;//(1)

		   

	   }

   }

   echo Person::$a;

   //不会报错,输出900;(1)写法是错误的,但是因为没有创建对象,

   //所以不会被调用,也就不会出错~

*/



   //第三种情况“

   class Person{

	   public static $a=9011;



	   public function __construct(){

           $this->a=45;//(1)		   

	   }

   }

     $p1=new Person();

   echo Person::$a;

   //;(1)写法是错误的,但是因为创建了对象,被调用

?>






 

你可能感兴趣的:(static)