php面向对象的static关键字

原创 2015年11月18日 23:10:06

在写php类的时候总会用到static关键字,也只是知道怎么用,却不知道为什么这么用,最近在看一本讲php面向对象核心知识的书,结合书中的内容和个人的理解谈谈为什么这么使用static。
首先上代码:

  class student
{
    public static $name ="Tom";

    public function staticValue() {
        return self::$name;
    }
}
$tom=new student();
echo $Tom->staticValue();

这样写是没问题的,不知道大家有么有想过为什么要在类里面用self::$name去调用 静态变量而不是$this->name这样子调用。
这就得提到$this,首先稍微讲一下什么是对象,对象是实例化类出来的一组属性的集合但不包含类中的方法(包含指向方法的指针)。而$this 是指向当前对象的指针,意思是$this只能指向所实例化出来的对象的东西。而静态属性存储在单独一块区域(可以把它称作静态数据区,用来存储静态变量和全局变量)。这时候如果用$this去指向静态属性时,由于对象中不存在静态属性,只有在原类中存在,所以会报错。
我们看一下,我先序列化一个没有静态属性的类:

class Foo
{
    public $my_static = 'foo';

    public function staticValue() {
        return $this->my_static;
    }

    $foo = new Foo();
    echo serialize($foo);
    var_dump($foo);
}

返回的是
O:3:"Foo":1:{s:9:"my_static";s:3:"foo";}
object(Foo)[1]
public 'my_static' => string 'foo' (length=3)

而序列化一个有静态属性的类

class Foo
{
    public static $my_static = 'foo';

    public function staticValue() {
        return self::$my_static;
    }
}
$foo = new Foo();
echo serialize($foo);
var_dump($foo);

返回

foo O:3:"Foo":0:{}
object(Foo)[1]

由此可见静态属性并不存在于该对象中,自然$this无法调用。而self是调用类中的东西与实例化出来的对象无关,所以静态属性是这样调用的。

相关文章推荐

php面向对象类中的$this,static,final,const,self及双冒号 :: 这几个关键字使用方法。

php中this,self,parent三个关键字的作用 this,self,parent三个关键字之间的区别,从字面上比较好理解,分别是指这、自己、父亲。我们先建立几个概念,这三个关键字分别是用...
  • tham_
  • tham_
  • 2014年12月20日 12:23
  • 3468

PHP面向对象:延迟静态绑定(static关键字)

最近看到了PHP面向对象中的延迟静态绑定这块,注意:php5.3之前没有引入延迟静态绑定,所以版本较低的童鞋可能用不了。 这里我们用一个简单的工厂方法(生成包含类的实例的一种方法)来说明//定义一个...

PHP面向对象之析构方法,以及关键字static

1析构方法会自动调用 2析构方法主要用于销毁资源 3析构方法调用顺序是先创建的对象后销毁 析构方法在什么时候调用: ①当程序(进程)结束退出时 ②当一个对象成为了垃圾对象的时候,该改对象的析构方法...

面向对象基础-static关键字

  • 2012年09月06日 20:13
  • 617KB
  • 下载

Java笔记2 面向对象<2>static关键字、main函数、静态运用、单例设计模式

06天-01-面向对象(static关键字) l  static 关键字 用于修饰成员(成员变量和函数)。 l  被修饰后的成员变量具备如下特点: 1)       随着类的加载而加载。也就是...

面向对象3_关键字【this】【static】【final】

this关键字 this.变量名 代表当前对象 只要在本类中用到了本类的对象,通常都用this 局部变量和成员变量同名时,用this区分, 没有this则不能访问堆内存中的成员变量相当于      ...
  • ie800
  • ie800
  • 2013年11月28日 18:16
  • 643

12-10java面向对象之static关键字

1.static关键字 我们在程序编写中最常出现的static地方就是public static void main(String []  args)     这个主方法就使用了static关键字。 ...

鸟哥Java学习之构造函数、this、static关键字-面向对象

1.构造函数:可以给对象进行初始化,创建对象都必须要通过构造函数进行初始化。一个类中没有定义构造函数,会有一个默认的空参数构造函数。     事物一旦产生就具备的内容定义在构造函数中,格式:类名...

面向对象(Static关键字+main函数)-第12天

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------ 面向对象(Static关键字+main函数) 1、面向对象(Static...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:php面向对象的static关键字
举报原因:
原因补充:

(最多只允许输入30个字)