Blogger Information
Blog 49
fans 0
comment 3
visits 23017
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
类的封装,继承及拦截非法访问以及抽象类与接口及命名空间
P粉479712293
Original
519 people have browsed it

题目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.浏览器运行效果图:

Correcting teacher:PHPzPHPz

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post