作业内容:1、练习课上所学知识
1.静态成员和静态方法
static
<?php
class A{
// 静态成员变量
public static $num;
// 静态成员方法
public static function AddNum(){
self::$num++;
}
public function MyAddNum(){
// $this->num++; //这句是错的。不能这样调用静态成员变量
self::$num++;
}
public static function ShowNum(){
echo self::$num;
}
}
$a = new A();
$a->MyAddNum(); // 能过普通方法改变静态成员变量
A::ShowNum(); // 调用静态成员方法,输出1
$b = new A();
$b->MyAddNum();
A::ShowNum(); // 输出2
2.抽象类
abstract
<?php
// 抽象类
abstract class A{
abstract public function say();
}
//继承抽象类,要把抽象类的方法重写
class B extends A{
public function say(){
echo '说话';
}
}
$b = new B();
$b->say();
3.类常量
const
class A{
const APP_NAME = '常量';
public function get_name(){
return self::APP_NAME;
}
}
// 外部访问方法
echo A::APP_NAME;
$a = new A();
echo $a->get_name();
4.接口
接口里,只允许声明2个成员:1、常量;2、抽象方法
关键词:interface声明接口,implements使用接口
interface File{
// 抽象方法
public function a();
public function b($x,$y);
}
class Teacher implements File{
public function a(){
//...
}
}
5.后期静态绑定
也叫延迟静态绑定,关键词:static,取代静态self
<?php
class A{
public static function test(){
echo 'A - test()';
}
public function show1(){
return self::test();
}
public function show2
// 后期延迟绑定
return static::test();
}
}
class B extends A{
public static function test(){
echo 'B - test()';
}
}
$a = new A();
$b = new B();
$a->show1(); // A - test()
$b->show1(); // A - test()
$a->show2(); // A - test()
$b->show2(); // B - test()
6.魔术方法
6.1构造和析构
__construct 构造方法,在new类的时候,自动执行
__destruct 析构方法,在类注销(执行结束)的时候,自动执行
类遵循先进后出的原则,如下示例:
<?php
class A{
public $n;
public function __construct($n){
$this->n = $n;
echo $this->n.'构造<br>';
}
public function __destruct(){
echo $this->n.'析构<br>';
}
public function __get($name){
echo $this->$name;
}
}
$a = new A('a');
$b = new A('b');
输出:
a构造
b构造
b析构
a析构
6.2.属性重载
__get,获取不可见和未定义的属性,触发这个魔术方法
__set,修改成员变量的时候,触发
6.3.方法重载
__call,有两个参数
public function __call($key, $value){
// $key => 对应调用的方法名;
// $value => 对应的参数;
}
6.4 访问未定义的静态方法触发
__callStatic
public static function __callStatic($key, $value){
// $key => 对应调用的方法名;
// $value => 对应的参数;
}