Blogger Information
Blog 35
fans 0
comment 0
visits 17006
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
0812-文件引用及作用域、类(对象)
三九三伏
Original
493 people have browsed it

一、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>';

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