Correcting teacher:PHPz
Correction status:qualified
Teacher's comments:
其他
案例源码
<?php
use _0815\D;
use _0815\Demo2 as _0815Demo2;
use _0815\Demo3;
use Demo2 as GlobalDemo2;
namespace six;
class Demo {
private $data = ['a'=>'结果1','b'=>'结果2','c'=>'结果3'];
private $data2 = '这仅仅是个测试';
public $text = '10';
public $text2 = '20';
protected $text3 = '30';
// 访问数组中的单值
public function __get($name)
{
if(array_key_exists($name,$this->data)){
return $this->data[$name]; // 访问数组的元素,数组名不需要加'$';
}else{
// 访问数组,或者访问单值
return $this->data2;
}
// return array_key_exists($name,$this->data)? $this->data[$name] : return $this->data2;
}
}
$getData = new Demo;
// echo $getData->b;
echo $getData->a.'<hr>';
echo $getData->data4.'<hr>';
// 统一个类中无法反复声明__get()函数,引用不同的数据类型可以使用新增类,或者定义一个子类,
// 通过继承父类的protected,public,方法,构造方法(需要引入父类进行占位,为了传参);
class Demo2 extends Demo{
public function __get($name)
{
return $this -> $name;
}
}
$getData2 = new Demo2;
echo $getData2->text.'<hr>';
class Test
{
protected string $txt;
// public string $txt2;
private $txt3 = '我是父类的私有变量';
public function __construct($txt,$txt2)
{
$this->txt = $txt;
$this->txt2 = $txt2;
}
protected function getInfo():string
{
return $this->txt.' '.$this->txt2;
// return ;
}
}
// 扩展子类
class Test1 extends Test
{
private string $txt4;
public function __construct($txt,$txt2,$txt4)
{
// 引用父类得构造器占位,一个就够了,不需要两个construct
parent::__construct($txt,$txt2);
// parent::__construct($txt2);
$this -> txt4 = $txt4;
}
public function getInfo(): string
{
return parent::getInfo() . '....' .$this->txt4;
}
}
$Demo6 = new Test1('hello','world','我在子类里面');
echo $Demo6->getInfo().'<hr>';
// 类中存在抽象方法,类必须为抽象类
abstract class GetData
{
protected string $id = '0';
protected string $frcn = '38950';
protected string $imsi = '460001234512345';
// 抽象类中,方法无法完成,但必须在子类中完成
abstract public function getInfo();
}
// 抽象类扩展,方法可完成
class GetDataSon extends GetData
{
public function getInfo()
{
return $this->id;
}
}
$GET = new GetDataSon;
echo $GET->getInfo().'<hr>';
// 最终类,方法必须完成,否则会报错,无法再继续扩展子类了,
final class Demo10 {
public function getInfo(){
}
}
// 接口类中两类成员:常量,方法(两者必须都是public)
interface iName {
public const NATION = 1;
public const NAME2 = 2;
public function A();
public function B();
public function C();
}
echo iName::NATION.'<hr>';
// 抽象类继承接口的方法,可实现部分功能
abstract class name implements iName{
public function A(){
return iName::NATION;
}
}
// 工作类,继承抽象类
class name2 extends name {
public function B(){
}
public function C(){
}
}
namespace four;
const OP = 'WOCAO';
echo \AAA\show2().'<hr>';
echo \AAA\Index::class.'<hr>';
echo \AAA\Index::show().'<hr>';
namespace AAA;
const KKK = '又是一个测试';
function show2(){
return __METHOD__;
};
class Index {
public static function show(){
return __METHOD__;
}
}
案例结果