PHP类中的静态方法使用实例

在php中静态方法我们就直接在函数或变量前加一个static就可以了,使用的时候和静态变量差不多,不需要实例化,直接用::调用了,下面我来给大家举几个关于静态方法实例。

PHP也不例外!所谓静态方法(属性)就是以static关键词标注的属性或者方法(例如:静态属性public static username;)

静态方法和非静态方法最大的区别在于他们的生命周期不同,用一个实例来说明静态方法定义,定义静态方法很简单,在声明关键词function之前加上static,实例代码如下:

  1. class A  
  2. {  
  3.     static function fun()  
  4.     {  
  5.         // do somathing  
  6. }  

静态方法使用

使用的时候和静态变量差不多,不需要实例化,直接用::调用,实例代码如下

A::fun() 

对比普通方法

因为静态方法的调用不需要实例化,所以在静态方法中引用类自身的属性或者方法的时候会出错,也就是形如self和$this是错误的,实例代码如下:

  1. class MyClass  
  2. {  
  3.     public $num = 5;  
  4.     function __construct()  
  5.     {  
  6.         $this->num = 10;  
  7.     }  
  8.     function fun_1()  
  9.     {  
  10.         echo "I am a public method named fun_1.n";  
  11.         echo "The num of object is {$this->num}.n";  
  12.     }  
  13.     static function fun_2()  
  14.     {  
  15.         echo "I am a static method named fun_2.n";  
  16.     }  
  17.     function fun_3($n)  
  18.     {  
  19.         echo "The arg is {$n}n";  
  20.     }  
  21. }  
  22. $m = new MyClass;  
  23. $m->fun_1();  
  24. $m->fun_2();  
  25. $m->fun_3('test');  
  26. MyClass::fun_1();  
  27. MyClass::fun_2();  
  28. MyClass::fun_3('test');  
  29. /* 
  30. 输出结果: 
  31. lch@localhost:php $ php class_method.php 
  32. I am a public method named fun_1. 
  33. The num of object is 10. 
  34. I am a static method named fun_2. 
  35. The arg is test 
  36. I am a public method named fun_1. 
  37. PHP Fatal error:  Using $this when not in object context in /Users/lch/program/php/class_method.php on line 14 
  38. */ 

再看一实例,用一个实例来说明,代码如下:

  1. class user{  
  2. public static $username;   //声明一个静态属性  
  3. public $password;     //声明一个非静态属性  
  4. function __construct($pwd) {  
  5.   echo ‘Username:’,self::$username;   //输出静态属性  
  6.    
  7.   self::$username = ‘admin’;  //为静态属性赋值  
  8.   $this->password = $pwd;   //为非静态属性赋值  
  9. }  
  10. public function show(){    //输出类属性  
  11.   echo ‘  
  12. Username:’,self::$username;  
  13.   echo ‘  
  14. Password:’,$this->password;  
  15. }  
  16. public static function sshow(){  
  17.   echo ‘  
  18. Username:’,self::$username;  
  19.   echo ‘  
  20. Password:’,$this->password;  
  21. }  
  22. }  
  23. user::$username = ‘root’;    //为赋值user类的静态属性赋值  
  24. $objUser = new user(’123456′);     //实例化user类  
  25. $objUser->sshow();  
  26. unset($objUser);  
  27. echo ‘  
  28. Username:’,user::$username;  
  29. /*  
  30. * 输出结果为:  
  31. * Username:root  
  32. * Username:admin  
  33. * Password:123456  
  34. * Usern  
  35. ame:admin  
  36. * */  

从这里实例中可以看出,静态属性在类实例化以前就起作用了,并且在对象被销毁时静态属性依然可以发挥作用!

也因为静态方法的这种属性,所以不能在静态方法中调用非静态属性或者方法

接着看

1、php类中,假设所有的属性与方法的可见性为public,那么在外部访问类的方法或属性时,都必须通过对象【类的实例化过程】来调用,实例代码如下:

  1. class Log  
  2. {  
  3.     public $root = DIRECTORY_SEPARATOR;  
  4.     public $logPath = '/data/app/www/test-realtime.monitoring.c.kunlun.com/log';  
  5.     public $defaultDir = 'default';  
  6.       
  7.     public function writeLog($logName$logType$data$newDir = FALSE)  
  8.     {  
  9.         $fileName = '';  
  10.           
  11.         if (!file_exists($this->logPath))  
  12.         {  
  13.             mkdir($this->logPath, 0777);  
  14.         }  
  15.           
  16.         if ($newDir !== FALSE)  
  17.         {  
  18.             @mkdir($this->logPath.$this->root.$newDir, 0777);  
  19.             $fileName = $this->logPath.$this->root.$newDir.$this->root.date('Y-m-d', time()).'_'.$logName.'_'.$logType.'.log';  
  20.         }  
  21.         else   
  22.         {  
  23.             @mkdir($this->logPath.$this->root.$this->defaultDir, 0777);  
  24.             $fileName = $this->logPath.$this->root.$this->defaultDir.$this->root.date('Y-m-d', time()).'_'.$logName.'_'.$logType.'.log';  
  25.         }  
  26.           
  27.         file_put_contents($fileNamedate('Y-m-d H:i:s').' '.$data."n", FILE_APPEND);  
  28.     }  
  29. }  

类的实例化对象的过程:$logObj = new Log();

访问类中的方法:$logObj->writeLog($param1, $param2, $param3, $param4);

访问类中的属性:echo $logObj->root;

2、如果类中的属性前被static关键字修饰时,就不能通过对象来访问被static修饰的属性,但如果是类中的方法被static修饰时则即可以通过对象也可以通过类名::方法名的方式来进行访问。

3、如果类中的方法被static修饰则,方法中不能用$this,$this指的是类的实例化对象,由于静态方法不用通过对象就可以调用,所以伪变量$this不可用。

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 本站源码并不保证全部能正常使用,仅供有技术基础的人学习研究,请谨慎下载
8. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » PHP类中的静态方法使用实例

96 评论

  1. salbutamol 100 mcg cheap viagra 25 mg sildenafil 100mg cheap

  2. brand cialis 40mg viagra 150mg buy sildenafil 100mg for sale

  3. order domperidone 10mg without prescription tetracycline 250mg ca order flexeril 15mg generic

  4. buy tadalafil 20mg for sale buy cialis pill cialis mail order usa

  5. best online casinos that payout gambling casino help writing research paper

  6. nortriptyline order online panadol brand generic paroxetine 20mg

  7. purchase tricor generic cheap viagra cheap viagra sale

  8. prednisone 40mg generic deltasone tablet amoxicillin 250mg pill

  9. dapsone 100 mg ca avlosulfon uk buy atenolol 100mg pills

  10. order phenergan generic cialis delivery buy generic tadalafil

  11. buy tadalafil 40mg generic sildenafil 20 mg best place to buy ed pills online

  12. suhagra 50mg pill sildenafil india how to get sildalis without a prescription

  13. buy temovate clobetasol uk buy generic amiodarone 200mg

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡