博客列表 >类的重载与命名空间

类的重载与命名空间

一代宗师
一代宗师原创
2021年02月24日 19:58:11568浏览

1. 类成员重载

重载 :系统在特定的时机自动调用的方法
__get 触发时机:对象在外部访问私有成员或者受保护属性时调用
该方法有一个参数:参数就是属性名

  1. <?php
  2. class Get
  3. {
  4. public $name;
  5. private $age;
  6. protected $hight;
  7. function __construct($name,$age,$hight){
  8. $this -> name = $name;
  9. $this -> age = $age;
  10. $this -> hight = $hight;
  11. }
  12. public function __get($shuxing){
  13. if ($shuxing == 'age') {
  14. return $this -> age;
  15. }
  16. }
  17. }
  18. $boj = new Get('小明',18,170);
  19. echo $boj -> age;

__set 触发时机:对象在外部设置私有成员或者受保护成员属性值时后调用
需要两个参数,属性名和属性值

  1. <?php
  2. class Set
  3. {
  4. public $name = '小明';
  5. private $age = 18;
  6. protected $hight = 175;
  7. public function __get($shuxing){
  8. if ($shuxing == 'age') {
  9. $this -> age;
  10. }
  11. }
  12. public function __set($name,$val){
  13. var_dump($name, $val);
  14. if ($name == 'age') {
  15. $this -> age = $val;
  16. }
  17. }
  18. }
  19. $boj = new Set();
  20. $boj -> age = 23;
  21. echo $boj -> age;

__tostring 触发时机:echo 一个对象的时候触发,该函数需要return一个字符串

  1. <?php
  2. class SString
  3. {
  4. public $name = '小明';
  5. public function __toString(){
  6. return '我叫'.$this->name;
  7. }
  8. }
  9. $boj = new SString();
  10. echo $boj;

__unset 触发时机:当外部销毁私有属性或者受保护的属性时候触发,
需要传入一个属性名

  1. <?php
  2. class Uset
  3. {
  4. public $name = '小明';
  5. private $age = 18;
  6. protected $hight = 175;
  7. public function __unset($name){
  8. if ($name == 'age') {
  9. unset($this->age);
  10. }
  11. }
  12. }
  13. $boj = new Uset();
  14. unset($boj->age);
  15. var_dump($boj);

__destruct 触发时机:当对象被销毁时候自动调用

  1. <?php
  2. class xigou
  3. {
  4. public $name = '小明';
  5. function Name(){
  6. echo '我叫'.$this->name.'<br>';
  7. }
  8. public function __destruct(){
  9. echo '我被释放了';
  10. }
  11. }
  12. $boj = new xigou();
  13. echo $boj -> Name();
  1. <?php
  2. //serialize 序列化
  3. // __sleep 触发时机:在序列化一个对象时候调用,返回值必须是一个数组,数组中写想要序列化成员属性名
  4. // __wakeup 触发时机:在反序列化一个对象时候调用
  5. //unserialize 反序列化
  6. class Get
  7. {
  8. public $name;
  9. public $age;
  10. public $hight;
  11. function __construct($name,$age,$hight){
  12. $this -> name = $name;
  13. $this -> age = $age;
  14. $this -> hight = $hight;
  15. }
  16. public function __sleep(){
  17. return ['name','age'];
  18. }
  19. public function __wakeup(){
  20. $this -> hight = 180;
  21. }
  22. }
  23. $boj = new Get('小明',18,170);
  24. $str = serialize($boj);
  25. file_put_contents('boj.text',$str);
  26. $str2 = file_get_contents('boj.text');
  27. $obj = unserialize($str2);
  28. var_dump($obj);
  1. <?php
  2. // __call 触发时机:当调用一个不存在对象方法时候触发
  3. // 需要传入两个参数,第一个是函数名,第二个是一个数组
  4. // __callstatic 触发时机:当调用一个不存在静态方法时候触发
  5. class Call
  6. {
  7. public $name = '小明';
  8. public function __toString(){
  9. return '我叫'.$this->name;
  10. }
  11. public function __call($name, $value){
  12. var_dump($name, $value);
  13. }
  14. public static function __callstatic($name, $value){
  15. var_dump($name, $value);
  16. }
  17. }
  18. $boj = new Call();
  19. $boj -> boy(1,2,3);
  20. $boj::dome(1,2,3);

2. 全局成员

  1. <?php
  2. //php全局成员:类,常量,函数
  3. //全局成员特点:一旦定义不能复用
  4. //类
  5. class Dome
  6. {
  7. public $domes = __CLASS__;
  8. }
  9. $obj = new Dome();
  10. echo $obj->domes.'类'.'<br>';
  11. //常量
  12. const NAME = 'admin';
  13. echo NAME.'<br>';
  14. //函数
  15. function dome(){
  16. return __FUNCTION__;
  17. }
  18. echo dome();

3. 空间的声明与空间成员的访问;

  1. <?php
  2. // 空间的声明与空间成员的访问
  3. //命名空间 关键字 namespace
  4. namespace ns{
  5. class Dome
  6. {
  7. public $domes = __CLASS__;
  8. }
  9. $obj = new Dome();
  10. echo Dome::class.'<br>';
  11. //常量
  12. const NAME = 'admin';
  13. echo NAME::class.'<br>';
  14. //函数
  15. function dome(){
  16. return __FUNCTION__;
  17. }
  18. echo dome::class.'<br>';
  19. }

4. 空间成员的分解与合并

合并
dome3.php

  1. <?php
  2. //相同命名空间成员的组织方式
  3. namespace ns;
  4. require 'dome3-1.php';
  5. require 'dome3-2.php';
  6. require 'dome3-3.php';
  7. // 类
  8. echo Demo1::class.'<br>';
  9. // 常量
  10. echo Demo2::class.'<br>';
  11. // 函数
  12. echo Demo3::class;

成员分解
dome3-1.php

  1. <?php
  2. namespace ns;
  3. // 类
  4. class Demo1
  5. {
  6. }

dome3-2.php

  1. namespace ns{
  2. class Demo2
  3. {
  4. // 我有500行代码
  5. }
  6. }

dome3-3.php

  1. <?php
  2. namespace ns{
  3. class Demo3
  4. {
  5. }
  6. }

5. 子空间,并在子空间中访问任何空间中的成员的方式

  1. <?php
  2. namespace ns
  3. {
  4. class dome{
  5. }
  6. echo dome::class,'<br>';
  7. echo ns2\dome::class,'<br>';
  8. echo ns2\ns3\dome::class,'<hr>';
  9. }
  10. //ns子空间
  11. namespace ns\ns2
  12. {
  13. class dome{}
  14. echo ns3\dome::class,'<hr>';
  15. }
  16. //ns2子空间
  17. namespace ns\ns2\ns3
  18. {
  19. class dome{}
  20. //访问上级
  21. echo \ns\ns2\dome::class,'<br>';
  22. echo \dome::class;
  23. }
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议