博主信息
博文 35
粉丝 0
评论 0
访问量 28967
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
0812-文件引用及作用域、类(对象)
三九三伏
原创
1127人浏览过

一、include和require

两者用法相同,区别在于出错处理,include出错后可继续向下执行,require出错后终止执行。
包含的文件与当前脚本共用同一个作用域

二、类与对象

常用关键字和操作

对象是一个容器,是全局成员的一个前缀。
类:全局成员,声明,class,大驼峰UserName,PascalName

  1. // 类声明 class
  2. class Goods
  3. {
  4. }
  5. // 类的实例化->对象 new
  6. $goods = new Goods();
  7. // 实例总是与一个类绑定。
  8. var_dump($goods instanceof Goods);
  9. echo '<hr>';
  10. echo get_class($goods).'<br>';
  11. // 动态类
  12. // 控制器就是一个动态类,控制器名称出现在url
  13. $controller = $goods;
  14. $obj = new $controller();
  15. var_dump($obj);

  1. /**
  2. * 类成员
  3. * 1. 实例成员:用对象访问,内部用$this->属性
  4. * 2. 静态成员:static定义,用类访问,内部用self::$静态属性名
  5. */
  6. class User1 {
  7. //实例成员
  8. // 默认:公有成员public
  9. public $username = '路人甲';
  10. // 私有:只能在当前类使用
  11. private $salary = 60000;
  12. //方法:函数语法
  13. public function getSalary(){
  14. $user = new User1();
  15. return $user->salary;
  16. }
  17. }
  18. // 实例化
  19. $user1 = new User1();
  20. echo $user1->username.'<br>';
  21. //私有变量只能内部使用,外部直接使用会报错。
  22. // echo $user1->salary.'<br>';
  23. echo $user1->getSalary();

以上代码如果改动User1这个名字,通用性会受影响,因此this派上用场了。

  1. class User1 {
  2. ...
  3. //方法:函数语法
  4. public function getSalary(){
  5. // 缺乏通用性不建议
  6. // $user = new User1();
  7. // return $user->salary;
  8. // 使用this更通用
  9. return $this->salary;
  10. }
  11. }
  12. ...

魔术方法

类里面采用双下划线开始的函数,只有使用权没有定义权。

  1. // 获取类中任意私有属性,属性获取器。
  2. class User1 {
  3. //实例成员
  4. // 默认:公有成员public
  5. public $username = '路人乙';
  6. // 私有:只能在当前类使用
  7. private $salary = 100000;
  8. // 区别身份
  9. public $role = '老婆';
  10. // 获取器
  11. public function __get($name) {
  12. // 访问工资时,少报1000
  13. if($this->role == '老婆')
  14. return $this->$name - 1000;
  15. return $this->$name;
  16. }
  17. // 设置器
  18. public function __set($name, $value){
  19. $this->$name = $value;
  20. }
  21. // __get,__set拦截非法请求
  22. }
  23. // 实例化
  24. $user1 = new User1();
  25. echo $user1->username.'<br>';
  26. //通过属性获取器直接访问私有变量。
  27. echo $user1->salary.'<br>';
  28. //通过属性设置器直接设置私有变量。
  29. $user1->salary = 2000000;
  30. echo $user1->salary.'<br>';

构造方法

  1. class User {
  2. public $username;
  3. public $role;
  4. private $salary;
  5. private $age;
  6. // 当前类实例状态(属性值)应该有用户决定。
  7. // 构造方法派上用场,实例化时自动触发。
  8. public function __construct($username, $role, $salary, $age)
  9. {
  10. $this->username = $username;
  11. $this->role = $role;
  12. $this->salary =$salary;
  13. $this->age = $age;
  14. }
  15. }
  16. $user1 = new User('路人甲', '会计', 15000, 30);
  17. $user2 = new User('路人乙', '销售', 10000, 32);
  18. echo $user1->username.'<br>';
  19. echo $user2->username.'<br>';

静态成员

被所有对象共享

  1. class User {
  2. public $username;
  3. public $role;
  4. private $salary;
  5. private $age;
  6. // 当前类实例状态(属性值)应该有用户决定。
  7. // 构造方法派上用场,实例化时自动触发。
  8. public function __construct($username, $role, $salary, $age, $nation = '中国')
  9. {
  10. $this->username = $username;
  11. $this->role = $role;
  12. $this->salary =$salary;
  13. $this->age = $age;
  14. // 初始化静态属性
  15. self::$nation = $nation;
  16. }
  17. // 静态属性,不写死,在构造函数里初始化。
  18. public static $nation;
  19. // 静态方法访问静态属性
  20. public static function hello() {
  21. // 在类中要使用self引用当前类
  22. // return 'Hello,'. User::$nation;
  23. return 'Hello,'. self::$nation;
  24. }
  25. }
  26. $user1 = new User('路人甲', '会计', 15000, 30);
  27. echo $user1->username.'<br>';
  28. // 类外部访问静态变量
  29. echo User::$nation.'<br>';
  30. // 调用静态方法
  31. echo User::hello().'<br>';
  32. $user2 = new User('路人乙', '销售', 10000, 32, '泰国');
  33. echo $user2->username.'<br>';
  34. echo User::$nation.'<br>';

批改老师:PHPzPHPz

批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学