static关键字
当属性和方法加上static关键字后,属性和方法就是类的,可以直接通过类名进行调用,无需实例化。么 当给一个属性加上static关键字,那么这个属性变成了类属性,不需要实例化类(获得对象)就可以直接用类名进行调用。如Person::$foot;方法同理如Person::work();
命名空间+类名 = 类文件路径.
用spl_autoload_register()替换字符串后自动加载类文件
imooc.php:
<?php class Imooc { public function nice() { echo "imooc nice"; } }
main.php:
<?php function __autoload($className) //__autoload()是内置函数,实现类的自动加载 { require $className . ".php"; } $imooc = new Imooc(); var_dump($imooc); //结果为:object(Imooc)#1(0){} //__autoload()函数将在以后PHP版本里不再使用,所以用spl_autoload_register()函数 <?php spl_autoload_register(function($className){ require $className . ".php"; }); $imooc = new Imooc(); var_dump($imooc); //结果为:object(Imooc)#1(0){} //还可以: <?php function test($className){ require $className . ".php"; } spl_autoload_register('test'); $imooc = new Imooc(); var_dump($imooc); //结果为:object(Imooc)#1(0){} //若在类里: <?php class Momo { function haha($className) { require $className . ".php"; } } spl_autoload_register([new Momo,'haha']); $imooc = new Imooc(); var_dump($imooc); //结果为:object(Imooc)#1(0){}
现文件级别如下:
main.php:
<?php spl_autoload_register(function($className){ include str_replace("\\","/",$className .".php"); //将\转换为/, (两个\\因为其中一个\是转义字符)将在网页上显示models/Imooc,为了显示出路径 }); $imooc = new models\Imooc(); var_dump($imooc); //结果为:object(models/Imooc)#2(0){}
Static关键字:
当给属性加上Static关键字,该属性就是类的属性,而不是对象的,不用实例化这个类,就可以通过类名调用。方法也是可以。如:
<?php class Person { public static $hand = "手"; public static $foot = "脚"; public static function work() { return "单纯的工作"; } } echo(Person::$foot); echo(Person::work());
<?php class Person { public $a = 1; public static function work() { echo ($this->$a); //有static关键字时不能这样,会报错。$this代表的是对象,self是代表的是类 return "单纯的工作"; } } echo(Person::work()); //会报错 <?php class Person { public static $hand = "手"; public static $foot = "脚"; public static function work() { echo(self::$hand); //因为是类的方法和属性,不是对象的,所以用self return "单纯的工作"; } } echo(Person::work()); //结果为:手单纯的工作 //子类 class Imooc extends Person { public function play() { parent::work(); //parent代表类 } } $imooc = new Imooc(); echo($imooc->play()); //结果为:手单纯的工作
$this在当前方法使用
self指向当前类
parent指向父类
<?php
class Person
{
public ststic $hand = "手";
public ststic function work()
{
return "工作";
}
}
echo (Person::$hand);
echo (Person::$work());
//当属性或方法定义为static后,输出时就不需要实例化类了,直接调用
1.
spl_autoload_register( function( $className ){
require $className . '.php';
} )
2.
function autoload( $className ){
require $className . '.php';
}
spl_autoload_register( 'autoload' )
3.方法是在类里面
class Momo{
function autoload( $className ){
require $className . '.php';
}
}
spl_autoload_register( [new Momo, 'autoload' ] )// 第一个参数实例,第二个参数是类的方法
$imooc = new Imooc();
var_dump(#imooc);
1.
spl_autoload_register( function( $className ){
require $className . '.php';
} )
2.
function autoload( $className ){
require $className . '.php';
}
spl_autoload_register( 'autoload' )
3.方法是在类里面
class Momo{
function autoload( $className ){
require $className . '.php';
}
}
spl_autoload_register( [new Momo, 'autoload' ] )// 第一个参数实例,第二个参数是类的方法
类的自动加载
function __autoload( $className ){
require $className . '.php';
}
spl_autoload_register()函数实现自动加载类
当 属性或方法被定义为 static 时,这个属性或方法就成了类的属性或类的方法,并不属于对象的属性或方法。
不同类中,同名方法可以存在
有两个下划线“__”表示php内置的函数
代表类的对象是$this代表类的本身是self
方法与属性使用static定义后则改属性与方法则属于该类的
当在静态的方法中无法通过$this调用非静态的属性因为$this指的是这个类的实例即是对象而static的方法是属于类的而不是对象的。
建议命名空间加上类名等于该类的文件路径
类属性调用:
class Person{
public static $hand = "手";
public static function work(){
return "单纯的工作";
}
}
echo (Person::$hand);
echo (Person::work());
类的自动加载:
spl_autoload_register(function($className){
require $className.".php";
});
$imooc = new Imooc();
autoload 函数
第三种方法
sql_autoload_register(function($className){
require $className . ".php";
});