静态变量 类型说明符是static。
静态变量属于静态存储方式,其存储空间为内存中的静态数据区,该 区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),直到整个程序运行结束。
除了静态的属性还有静态的方法.
在类的外部访问静态成员时,必须使用类名和扣操作符 :: ,而不需要创建对象.
- 单例模式(3个私有一个共有)
一个类永远只能创建一个对象,不管用任何方法都无法创建第2个对象,该对象大家共享。
必须是自行创建这个类的对象;
只提供私有的构造函数,
含有一个该类的静态私有对象,
提供一个静态的公有的函数用于创建或获取它本身的静态私有对象。
有一个private的clone方法,防止克隆;
<?php
/例
class Uni
{
//创建静态私有的变量保存该类对象
static private $instance;
//构造方法是私有,防止外部直接创建对象
private function __construct()
{
}
//防止克隆对象
private function __clone()
{
}
static public function getInstance()
{
//判断$instance是否是Uni的对象
//没有则创建
//注意instanceof的使用
if (!self::$instance instanceof self) {
self::$instance = new self(); //在类中实例化本类的对象,使用self
}
return self::$instance;
}
//普通方法
public function method()
{
echo '正常执行对象中的方法';
}
}
$ob1 = Uni::getInstance(); //获取uni的对象
$ob1->method();
echo "<br>";
$ob2 = Uni::getInstance();
$ob2->method();
echo "<br>";
if ($ob1 === $ob2) {
echo 'obj和ob2是同一个对象';
} else {
echo 'obj和ob2不是同一个对象';
}
小总结:使用单例模式才是一个对象,不然 上述结果就是产生两个对象。
在类的外部,实例化的个数是无法控制的。
- 对象赋值
对象之间的赋值,实际就是引用赋值,两个对象之间赋值后,就是一个对象了。所以当一个对象的内容发生变化后,另一个对象的内容也会发生变化。
普通变量之间的赋值,如果也想使用引用赋值,必须使用&。
如果要复制一个对象并不受他影响可以使用clone - 命名空间
命名空间通过关键字namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间。
命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误。