批改状态:合格
老师批语:接口类一般都是别人类,不然哪会那么多条件!
这句话是没什么意思, 接口也可以是自己写的

<?php
namespace User;
//一个正常类,可以被实例化,可以继承
class User{
// 公共属性
public $name;
public $salary;
// 受保护的属性
protected $sex;
// 私有化
private $work;
// 静态属性,静态可以public也可以protected
public static $age;
public static $height;
/*
*先定义一个静态属性——连接对象
*这里定义个静态属性,并且还把的值定义为null,就是方便后面好赋值,好调用
*/
protected static $pdo = null;
// 类常量
const CATEGORY = "这是一个类常量";
// 构造方法
/*
1、定义一个构造方法(初始化方法,一个类也就一个构造方法)
2、构造方法不能是私有的,受保护的,只能是公共的public
*/
public function __construct($name,$salary){
$this->name = $name;
$this->salary = $salary;//当前类对象的常规属性
self::$age = 30;//读取当前类的静态属性
echo self::$age;
}
//定义一个静态方法work
public static function work($name,$height){
/*
*首先静态方法里面不能用这个$this,因为静态方法是属于类成员,不是对象
*静态方法里面只能用self
不然就会出现这个错误:Fatal error: Using $this when not in object context in H:\phpstudy_pro\WWW\html.io\1008\class_a.php on line 24
*/
//return $this->name;//这样写会出现上面的错误
self::$height = $height;
return self::$height;
}
public function info($content){
echo "这是常规类方法".$content;
}
//定义4个魔术重载方法
// 当读取User类里面不可访问属性的值时,__get()被自动触发;
public function __get($name){
if($name ==='boss'){
return ($this->name ==='admin') ? $this->$name : '权限不够';
}
return $this->$name;
}
// 当设置User类里面不可访问属性的值时,__set()被自动触发
public function __set($name,$value){
if($name ==='boss'){
return ($this->name ==='admin') ? $this->$name : '权限不够';
}
return $this->$name;
}
//当对User类里面不可访问属性进行isset() 或empty()判断时,__isset()被自动触发
public function __isset($name){
return isset($this->$name);
}
public function __unset($name){
unset($this->$name);
}
//
public function __call($name,$arguments){
echo $name."方法不存在,触发了__call()方法";
}
public static function __callStatic($name,$arguments){
echo $name."静态方法不存在,触发了__callStatic()方法";
}
}
// 常规类操作---先实例化
$user = new User('xiaomao',20);
echo "<br>";
echo "常规方法--->";
// 获取对象的方法
$user->info('这是内容');
echo "<br>";
// 获取类的静态属性
echo "静态属性--->".User::$age;
echo "<br>";
echo "静态方法--->".User::work('name','333303');
// 用abstract定义一个抽象类,不能直接被实例化,可以继承
abstract class Phone{
// 定义一个受保护属性
protected $name;
// 定义一个构造方法
public function __construct($name){
$this->name = $name;
}
// 定义一个获取器,把当前的名字返回过期
public function getName(){
return $this->name;
}
// 定义一个抽象方法---设置名字(签名)
abstract public function setName($value);
}
class MyPhone extends Phone{
// 先写个构造方法,构造方法不能继承
public function __construct($name){
parent::__construct($name);
}
// 还必须先实现所继承抽象类中的抽象方法
public function setName($value){
$this->name = $value;
}
}
// 操作MyPhone类
$phone = new MyPhone('xiaomao');
echo "<br>用户名--->".$phone->getName()."<br>";
$phone->setName('Kat');
echo "他的昵称是--->".$phone->getName()."<br>";
//假如直接实例化Phone类,$newPhone = new Phone();报错---
// Fatal error(致命错误): Uncaught Error(未定义错误): Cannot(不能) instantiate(实例化) abstract(抽象) class(类) User\Phone(User空间里面的Phone类)
//
// 定义一个接口类
interface qqLogin{
//定义方法,必须要实现的
public function setName($name);
public function setPass($password);
}
//实现接口
class Mylogin implements qqLogin{
//定义两个属性
public $name;
public $password;
//先实现接口中的方法
public function setName($name){
$this->name = $name;
}
//继续实现接口中的方法
public function setPass($password){
$this->password = $password;
}
//可以弄一个自己的方法
public function login(){
return "你的登录账户:".$this->name."<br>你的登录密码为:".$this->password;
}
}
//继续实现接口
class Myreg implements qqLogin{
//还是要定义两个属性
public $name;
public $pass;
//继续实现接口中的方法
public function setName($name){
$this->name = $name;
}
public function setPass($password){
$this->pass = $password;
}
public function reg(){
return "你的注册账户:".$this->name."<br>你的注册密码为:".$this->pass;
}
}
//开始调用类Mylogin
$login = new Mylogin();
$login->setName('李大仙');
$login->setPass('123456');
echo $login->login();
//开始调用类Myreg
$reg = new Myreg();
$reg->setName('黄四娘');
$reg->setPass('654321');
echo "<br>";
echo $reg->reg();
?>点击 "运行实例" 按钮查看在线实例
总结:接口类一般都是别人类,不然哪会那么多条件!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号