Correcting teacher:PHPz
Correction status:qualified
Teacher's comments:
作业内容: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
abstract
<?php
// 抽象类
abstract class A{
abstract public function say();
}
//继承抽象类,要把抽象类的方法重写
class B extends A{
public function say(){
echo '说话';
}
}
$b = new B();
$b->say();
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();
接口里,只允许声明2个成员:1、常量;2、抽象方法
关键词:interface声明接口,implements使用接口
interface File{
// 抽象方法
public function a();
public function b($x,$y);
}
class Teacher implements File{
public function a(){
//...
}
}
也叫延迟静态绑定,关键词: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()
__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析构
__get,获取不可见和未定义的属性,触发这个魔术方法
__set,修改成员变量的时候,触发
__call,有两个参数
public function __call($key, $value){
// $key => 对应调用的方法名;
// $value => 对应的参数;
}
__callStatic
public static function __callStatic($key, $value){
// $key => 对应调用的方法名;
// $value => 对应的参数;
}