<?php
/*
* 类的静态成员 static 关键字 标志静态属性/方法 静态成员只能有本类来调用 为所有实例共享
* 优点:1.在内存中存在多个实例,静态成员在内存中只占一份,为所有实例共享,普通成员以实例的方式会创建多个内存
* 2.静态成员的执行效率比实例化高,不用创建对象就可以直接调用
* 缺点:静态成员不自动进行销毁,而实例化的则可以销毁
*
* */
class User{
public static $name='胡歌';
protected $_config = [
'auth_on'=>'true',
'auth_type'=>1 //认证方式 1事实认证 2位登录认证
];
public static $nation ='China';
private $salary;
//static $count=0; //记录已登录用户的总数
static $count=0;
public function __construct($name,$salary)
{
//静态成员与类的实例无关 不能用$this访问,用self::
self::$name=$name;
$this->salary=$salary;
self::$count ++;
}
public function getCount(){
echo $this->salary;
return sprintf('目前该网站的在线人数为%d<br>',
self::$count);
}
//对象被销毁时自动调用
public function __destruct(){
self::$count --;
}
}
/*
*1. 静态方法不能访问类中的普通属性(此时还不存在对象)
*2. 普通成员是对象级别的存在,只能通过对象访问 默认提供 $this指针
*3. 静态成员是类级别的存在 随着类的加载而加载 没有提供$this指针,优先与对象存在 只能用类引用self::访问
*4.
//加载类文件 类的自动加载器
require 'autoload.php';
$user1= new User('古力拉扎',25000);
$user2= new User('刘亦菲',30000);
$user3= new User('史蒂夫',30000);
unset($user3); //自动调用__destruct
echo User::getCount();
echo User::$name;
//使用对象引用也可以访问静态成员 不推荐
//echo $user1->getCount();
echo $user2->getCount();
echo User::$nation;
* **/