博客列表 >类的封装,继承及拦截非法访问以及抽象类与接口及命名空间

类的封装,继承及拦截非法访问以及抽象类与接口及命名空间

P粉479712293
P粉479712293原创
2022年11月12日 23:56:50516浏览

题目1:类的封装

1.php文件:

  1. <?php
  2. // *类的封装
  3. class Sanguo{
  4. // *private:私有,(把它封装起来)
  5. // *$data:容器/数组来表示
  6. private array $data=['troops'=>'一百万','food'=>'约二十万石','project'=>'直取江东'];
  7. // *采用属性拦截器来过滤
  8. public function __get($name)
  9. {
  10. if(array_key_exists($name,$this->data)){
  11. return $this->data[$name];
  12. }else {
  13. return "$name 属性不存在";
  14. }
  15. }
  16. }
  17. $sanguo=new SanGuo();
  18. echo $sanguo->troops,'<br>';
  19. echo $sanguo->food,'<br>' ;
  20. echo $sanguo->project,'<br>';

2.浏览器运行效果图:

题目2:拦截非法访问

1.php文件:

  1. <?php
  2. // *拦截非法访问
  3. class User1{
  4. // *1.拦截非静态方法的非法访问
  5. public function __call($name, $args)
  6. {
  7. // *第一个参数是方法名称
  8. // *第二个参数是以数组表示的参数列表
  9. printf('方法名: %s<br>参数列表: <pre>%s</pre>', $name, print_r($args, true));
  10. }
  11. // *2拦截静态方法的非法访问
  12. public static function __callStatic($name, $args)
  13. {
  14. // *第一个参数是方法名称
  15. // *第二个参数是以数组表示的参数列表
  16. printf('方法名: %s<br>参数列表: <pre>%s</pre>', $name, print_r($args, true));
  17. }
  18. }
  19. $user1=new User1();
  20. // *当访问一个并不存在的非静态方法时
  21. $user1->hello('张三','12345');
  22. // *当访问一个并不存在的静态方法时
  23. User1::welcome('李四','56789');

2.浏览器运行效果图:

题目3:自动拦截的用途

1.php文件:

  1. <?php
  2. // *自动拦截的用途
  3. // *查询方法库
  4. class Query
  5. {
  6. // *当这个查询类实例化时,应该自动连接数据库
  7. // *public function __construct()
  8. // *{
  9. // * self::connect();
  10. // *}
  11. public function table($table)
  12. {
  13. return $this;
  14. }
  15. public function where($table)
  16. {
  17. return $this;
  18. }
  19. public function find()
  20. {
  21. }
  22. }
  23. //* 查询入口类
  24. class Db
  25. {
  26. public static function __callStatic($name, $arguments)
  27. {
  28. // *所有查询操作在此完成,单入口查询
  29. return call_user_func_array([new Query(), $name], $arguments);
  30. }
  31. }
  32. Db::table('think_user')->where('id', 1)->find();

2.浏览器运行效果图:

题目4:类的继承

1.php文件:

  1. <?php
  2. // *类的继承
  3. // *父类
  4. class SanXi{
  5. // *属性
  6. public string $capital='太原市';
  7. private string $GDP='两万五千亿';
  8. protected string $name;
  9. // *构造方法
  10. public function __construct($name)
  11. {
  12. $this->name=$name;
  13. }
  14. // *自定义方法
  15. protected function getInfo():string{
  16. return $this->name;
  17. }
  18. }
  19. // *子类继承父类
  20. class CanZi extends SanXi{
  21. private string $agriculture;
  22. private string $education;
  23. public function __construct($name,$agriculture,$education)
  24. {
  25. parent::__construct($name);
  26. $this->agriculture=$agriculture;
  27. $this->education=$education;
  28. }
  29. public function getInfo():string{
  30. return parent::getInfo().'今年农业:'.$this->agriculture.',教育:'.$this->education.'<br>';
  31. }
  32. }
  33. $canzi=new CanZi('长治市','粮食丰收','新建一所大学');
  34. echo $canzi->getInfo();

2.浏览器运行效果图:

题目5:抽象类及其继承

1.php文件:

  1. <?php
  2. // *抽象类及其继承
  3. // *1.抽象类
  4. abstract class GuangDong{
  5. public string $capital='广州市';
  6. abstract public static function getInfo($name);
  7. }
  8. // *2.抽象类的继承
  9. class GusngZhou extends GuangDong{
  10. // *子类必须将父类的抽象方法加上实体
  11. public static function getInfo($name){
  12. return '你好,'.$name;
  13. }
  14. }
  15. echo GusngZhou::getInfo('祖国的南大门广州');

2.浏览器运行效果图:

题目6:接口与实现类

1.php文件:

  1. <?php
  2. // *接口与实现类
  3. //*1.接口
  4. interface iSanGuo{
  5. // *常量
  6. public const monarch='曹操';
  7. // *方法:public
  8. public function a1();
  9. public function a2();
  10. }
  11. // *2.实现类:实现了接口的类
  12. class WeiGuo implements iSanGuo{
  13. public function a1()
  14. {
  15. }
  16. public function a2()
  17. {
  18. }
  19. }
  20. // *3.如果一个实现类没有实现接口的全部方法,则必须在前面加上关键字:abstract
  21. abstract class SuGuo implements iSanGuo
  22. {
  23. public function a1()
  24. {
  25. }
  26. }
  27. class WuGuo extends SuGuo{
  28. public function a2()
  29. {
  30. }
  31. }
  32. // *4.一个实现类可以同时实现多个接口,及间接实现了多继承
  33. interface iWei{
  34. }
  35. interface iSu{
  36. }
  37. interface iWu{
  38. }
  39. // *一个晋类,同时从魏,蜀,吴三个接口中获取成员,间接实现了多继承
  40. class Jing implements iWei,iSu,iWu{
  41. }

2.浏览器运行效果图:

题目7:数据库接口中的增删改查方法的实现

1.php文件:

  1. <?php
  2. // *数据库接口中的增删改查方法的实现
  3. // *1.一个学生数据库接口
  4. interface iStuDb{
  5. // *insert:增加数据
  6. public static function insert(array $data);
  7. // *update:修改数据
  8. public static function update(array $data,string $where);
  9. // *delete:删除数据
  10. public static function delete(string $where);
  11. // *select:查询数据
  12. public static function select(array $options);
  13. }
  14. // *2.用一个抽象类实现学生数据库接口中的增删改查方法
  15. abstract class StuDb{
  16. // *insert:增加数据
  17. public static function insert(array $data){
  18. }
  19. // *update:修改数据
  20. public static function update(array $data,string $where){
  21. }
  22. // *delete:删除数据
  23. public static function delete(string $where){
  24. }
  25. // *select:查询数据
  26. public static function select(array $options){
  27. }
  28. }
  29. class Stu extends StuDb{
  30. }

2.浏览器运行效果图:

题目8:命名空间的意义是什么?

1.php文件:

  1. <?php
  2. // *命名空间
  3. // *1.命名空间的意义是什么?
  4. namespace _221112;
  5. function sanguo(){
  6. }
  7. namespace _221112b;
  8. function sanguo(){
  9. }
  10. namespace a;

2.浏览器运行效果图:

题目9:命名空间的3种类型及命名空间的分层

1.php文件:

  1. <?php
  2. // *命名空间的3种类型
  3. // *1.当前路径:非限定名称
  4. // *2.相对路径:限定名称
  5. // *3.绝对路径:完全限定名称
  6. namespace a;
  7. class Index{
  8. public static function show(){
  9. return __METHOD__;
  10. }
  11. }
  12. echo Index::show().'<br>';
  13. namespace one;
  14. class Index1{
  15. public static function show(){
  16. return __METHOD__;
  17. }
  18. }
  19. echo Index1::show() . '<br>';
  20. // *分层(one在上,two在下)
  21. namespace one\two;
  22. class Index2
  23. {
  24. public static function show()
  25. {
  26. return __METHOD__;
  27. }
  28. }
  29. echo Index2::show() . '<br>';
  30. // echo \one\two\Index2::show() . '<br>';
  31. // *起别名
  32. use one\tww\Index2 as Index;
  33. echo Index2::show().'<br>';

2.浏览器运行效果图:

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议