Correcting teacher:PHPz
Correction status:qualified
Teacher's comments:
<?php
//使用require加载通用部分
//require 和 include 几乎完全一样,除了处理失败的方式不同之外。
//require 在出错时产生 E_COMPILE_ERROR 级别的错误。
//换句话说将导致脚本中止而 include 只产生警告(E_WARNING),脚本会继续运行。
require __DIR__ . '/mysite/header.php';
$content = <<<body
<h1 style ="background:gray;color:white;height:300px;text-align:center">this is a content</h1>
body;
echo $content;
require __DIR__ . '/mysite/footer.php';
class User{
//访问限制符:
//1. private: 私有,仅限在当前类中使用
private $myname = 'zolo';
public function sayHello(){
return $this->myname;
}
}
//如果一个类没有构造函数,以及构造函数的参数不是必填项时,括号就可以省略
$u = new User;
//打印zolo
echo $u->sayHello();
class User{
private $myname = 'zolo';
private $a;
public function sayHello(){
return $this->myname;
}
public function __construct($args){
$this->myname = $args;
}
public function printa(){
//在方法内赋值
return $this->a = 'zolo2';
}
}
//重新给myname赋值
$u = new User('zolo1');
//打印zolo1
echo $u->sayHello();
//打印zolo2
echo $u->printa();
/**
* 类的扩展/抽象/最终
* 1. protected: 受保护/可继承
* 2. extends: 扩展/继承
* 3. parent: 父类引用
* 4. abstract: 抽象
* 5. final: 最终类
*/
class Person{
// public: 类中,子类, 类外都可见
public $str = 'yes ! I am public';
// private: 私有, 仅限当前类, 子类,外部都不可见
private $num = 9999;
// protected: 成员可继承,可以在子类中使用
protected $canwalk = 'yes ! preson can walk';
protected $name;
public function __construct($arg)
{
//给protected $name赋值
$this->name = $arg;
}
protected function getInfo(){
return $this->name;
}
}
class Student extends Person{
private $score;
public function __construct($name,$score)
{
// 引用了父类的构造方法
// parent: 父类引用 Person
parent::__construct($name);
$this->score = $score;
}
public function getStuInfo(){
return '调用父类方法:'.parent::getInfo().'<br>';
}
public function getScore(){
return $this->name.'同学的成绩是'.$this->score.'<br>';
}
public function getFatherStr(){
return '调用父类属性'.$this->canwalk.'<br>';
}
}
// $a = new Stu('NAMEA');
// echo $a->getInfo(); potected改成public就能在类外访问
$zolo = new Student('zolo',100);
echo $zolo->getStuInfo();
echo $zolo->getScore();
echo $zolo->getFatherStr();
// var_dump打印属性
//var_dump($zolo);
//美化打印
printf('<pre>%s</pre>',print_r($zolo,true));
// 抽象类必须通过继承/扩展的子类来间接实例化,不能直接使用
abstract class Demo{
}
class D extends Demo{
}
$d = new D;
//echo get_parent_class($d);//打印Demo
//抽象方法: 只有方法名,参数列表,没有具体实现(大括号);
//任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的
abstract class E{
abstract protected function hello($arg);
}
class F extends E{
public function hello($arg){
return 'Hello,abstract function implement:'.$arg.'<br>';
}
}
//call_user_func( callable $callback [, mixed $... ]): mixed
echo call_user_func([new F,'hello'],'zolo');
//final 关键字通过在定义方法和常量之前加上 final 来防止被子类覆盖
//如果一个类被声明为 final,则不能被继承。
//为了防止被继承, 可声明为最终类
final class G{
}
// 声明会报错
// class H extends G{
// }
interface userPay{
// 1. 类常量
const PAYKEY = 'zolo';
// 2. 必须是抽象,必须是public
public function weChat();
public function aliPay();
}
interface userBank{
public function zsBank();
}
class testPay implements userPay,userBank{
public function weChat(){}
public function aliPay(){}
public function zsBank(){}
}
printf('<pre>%s</pre>',print_r(class_implements('testPay'),true));