PHP面向对象-静态变量
普通成员(普通属性、普通方法),还有静态的成员(静态属性、静态方法):类型说明符static关键字
<?php
class Student
{
//静态成员属性
private static $count=46;
//静态成员方法
public static function showinfo(){
$str = "班级人数:".Student::$count;//静态成员在类的内部访问
echo $str."<br>";
}
}
$b1 = new Student();
$b1->showinfo();
echo Student::showinfo();//在类的外部访问
静态属性:就是类的属性,与类相关,与对象无关;静态方法:就是类的方法,与类相关,与对象无关。通过“类名::”来调用
静态属性或静态方法,在内存中只有一个,被所有对象去共享;好处:就是为了节省内存。
设置单例模式:
一个类只能有一个对象,只提供私有的构造函数,含有一个该类的静态私有对象,提供一个静态的公有的函数用于创建或获取它本身的静态私有对象,有一个private的clone方法,防止克隆。
对象之间的赋值clone:对象之间的赋值,实际就是引用赋值,两个对象之间赋值后,就是一个对象了。所以当一个对象的内容发生变化后,另一个对象的内容也会发生变化。
普通变量之间的赋值,如果也想使用引用赋值,必须使用&,如:$name2 = &$name1.
复制一个对象,使用clone 可以实现,例如:$s2 = clone $s1; 例子属于浅克隆。
命名空间的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生错误。
命名空间通过关键字namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间。
<?php
namespace model; //定义命名间
//类Student在model命名空间中
class Student
{
public function say(){
echo 'hello';
}
}
使用 use model\Student; //引入 model命名空间的Student 类。
引入命名空间的类时,也可以给类重新命名,原有的类名不能再使用。
使用 use model\Student as Stu; //引入 model命名空间的Student 类,并重命名为Stu
在有些场景下必须给类重新命名,比如还有一个类也是Student,如何同时使用这两个student类:写到一起
use model\Student as StuModel;
use controller\Student as StuController;
魔术方法:PHP中把以两个下划线__开头的方法称为魔术方法,构造方法__construct,析构方法 __destruct。
__autoload(),这是一个自动加载函数,spl_autoload_register()会取代__autoload()
<?php
spl_autoload_register('myautoload');
function myautoload($class)
{
$file = __DIR__ . '\\' . strtolower($class) . '.php';
if (is_file($file)) {
require_once $file;
} else {
echo $file . '不存在';
}
}