- 给力2012的地方门户的草根站长
- 什么叫长尾关键词?
- 新站搜索引擎SEO优化的四个忌讳
- UpdatePanel无法直接弹出窗口的解决
- c#indexof用法
- thinkphp中foreach
- Asp.net非常实用的51个代码(2)
- C#面:详细阐述什么是 DTO
- 如何删除VS2008/VS2005/VS2003中最近的项目
- 条件注释判断浏览器<!--[if !IE]><!--[if IE]><!--[if lt IE 6]><!--[if gte IE 6]>
邮箱:
手机:15383239821
thinkphp中普通方法与静态方法调用区别
1. 普通方法
创建类Demo,并定义一个公共普通方法:test1( )
调用语法:
//1. 创建对象
对象变量名 = new 类名 ;
//2 调用方法
对象变量 -> 普通方法() ;
例如:
$obj = new Demo();
echo $obj -> test2();
也可以将调用普通方法的二步合并为一步:
(new 类名) -> 普通方法();
例如: (new Demo) -> test2();
演示源码如下:
<?php
class Demo{
//定义公共普通方法
public function test1(){
return 'Nomal method:test1';
}
}
//1.创建对象
$obj = new Demo();
//2.用对象来调用普通方法
echo $obj -> test1();
运行结果:
Nomal method:test1
2. 静态方法(static)
创建类Demo,并定义一个公共静态方法:test2( )
调用语法:
类名::静态方法名(参数列表) ;
例如:
Demo::test2();
演示源码如下:
<?php
class Demo{
//定义公共静态方法
public static function test2(){
return 'Static method:test2';
}
}
//Demo类静态方法test2()调用
echo Demo::test2();
运行结果:
Static method:test2
注意:静态方法也可以像普通方法一样:用对象来调用,但不推荐这样做
例如,这样调用静态方法也是可以的:
$obj = new Demo();
echo $obj -> test2(); //test2()是静态方法
或者:
echo (new Demo) -> test2();
运行结果与使用:类::静态方法名()调用是一样的。
3. 普通方法中调用静态方法
静态方法是所有对象所共享的,而普通方法是所有对象都可以调用的。所以,普通方法中调用静态方法是可以的。
演示源码:
<?php
class Demo{
//定义公共普通方法
public function test1(){
//调用静态方法:test2()
return self::test2();
}
//定义公共静态方法
public static function test2(){
return 'Static method:test2';
}
}
//创建Demo类对象并调用普通方法test1()
echo (new Demo) -> test1();
演示代码说明:
(1): 因静态方法可以像普通方法一样访问,所以也可以这样调用静态方法:
public function test1(){
//调用静态方法,不用self::test2() ,用$this -> test2()
return $this -> test2();
}
(2): 创建对象与方法调用合并,好处就是省去了定义对象变量名。
定义变量名称,是一件很痛苦的事,写代码越多越感有感触
//创建Demo类对象并调用普通方法test1()
echo (new Demo) -> test1();
4. 静态方法中调用普通方法
普通方法中可以访问静态方法,那么反过来是否成立呢?
<?php
class Demo{
//定义公共普通方法
public function test1(){
return 'Nomal method:test1';
}
//定义公共静态方法
public static function test2(){
return $this -> test1();
}
}
//Demo类调用静态方法test2()
echo Demo::test2();
运行结果:出错啦!!!
Fatal error: Using $this when not in object context in 'php文件名'.
静态方法是属于类的,供所有该类的对象所共享。而普通方法是属于对象的。静态方法生成于编译前,这时对象未生成,因为通过对象访问的普通方法,当然也不能被访问!
静态方法中能否访问普通属性?答案是:不能!原因与这个相同。
5. 静态属性的访问
静态方法中,只能访问静态属性,不能访问普通属性。但是普通方法中可以访问静态属性,这也上面介绍的:普通访问中可以访问静态方法的原理是一样的。
实例演示:
<?php
class Demo{
public static $name = 'ThinkPHP';
//定义公共普通方法
public function test1(){
return self::$name;
}
//定义公共静态方法
public static function test2(){
return self::$name;
}
}
//对象访问
echo (new Demo) -> test1(); // 返回:ThinkPHP
echo (new Demo) -> name; // 返回:错误
//静态访问
echo Demo::test2(); // 返回:ThinkPHP
echo Demo::$name; // 返回:ThinkPHP
尽管我们可以像调用普通方法一样,用对象调用静态方法,但却不能调用静态属性,一定要注意!
总结:
普通方法与静态方法的尽管写在一个类中,但却工作在不同的空间;
普通方法可以访问静态方法,但反过就不行;
静态属性必须静态访问,但静态方法除了静态访问外,也可以对象访问。
- 上一篇:thinkphp添加视频
- 下一篇:thinkphp中explode
-
2013-06-04C# 哈希表Hashtable的增加,删除,遍历,排序
-
2019-11-18document.write()使用简介
-
2024-10-07svg path参数说明
-
2020-07-12无法启用iis express web服务器
-
2012-12-25虚拟主机到底是什么
-
2014-02-24Sql Server REPLACE函数的使用
