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 static关键字的用法及注意点

static用法一直以来用的模模糊糊的,觉得和java的static关键字似乎很类似,知道有所不同,却又不明白到底哪些不同,这里尽量列出PHP 中static的几种用法,第一次写博客,若有不足与改进之...
  • bloodperfect
  • bloodperfect
  • 2016年09月02日 20:51
  • 897

php面向对象中static 关键字的使用

使用static关键字可以将类中的成员标识为静态的,既可 以用来标识成员属性,也可以用来标识成员方法。普通成员作为对象属性存在,以Person类为例,如果在Person中有一个"$conuntry =...
  • wf120355
  • wf120355
  • 2013年03月29日 22:01
  • 1302

php之static静态关键字

都知道声明为static的方法可以在类没有被实例化的时候调用 但是php有个很有趣的现象,静态调用非静态方法:php可以对没有声明static的方法实现静态调用。 然后看到了有人说没有加stati...
  • whd526
  • whd526
  • 2017年04月20日 11:18
  • 424

Java中static关键字的作用

Java中static关键字的作用
  • jsqfengbao
  • jsqfengbao
  • 2015年03月29日 08:45
  • 16569

static关键字的使用和注意事项

static:★★★ 关键字,是一个修饰符,用于修饰成员(成员变量和成员函数)。 特点: 1,想要实现对象中的共性数据的对象共享。可以将这个数据进行静态修饰。 2,被静态修饰的成员,可以直接...
  • liyunlan33
  • liyunlan33
  • 2014年11月24日 16:24
  • 460

static关键字的作用

类中加static的作用:参考 http://wenku.baidu.com/view/1da5627002768e9951e738ae.html?from=related&hasrec=1...
  • wscdylzjy
  • wscdylzjy
  • 2015年03月13日 18:14
  • 1707

Static关键字深入理解

1、static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。 两者的区别是: 对于静态...
  • qq1028951741
  • qq1028951741
  • 2016年11月30日 10:05
  • 207

C++ 中的static关键字

static顾名思义是静态的意思。在这我要系统地讲述一下有关static关键字的作用,当然主要是讲述它在开发语言C与C++的作用,在其他方面的作用请另找资料。在讲解中肯定有不恰当之处,请大家大胆地扔砖...
  • wenrenhua08
  • wenrenhua08
  • 2014年10月11日 11:15
  • 2204

static与final关键字

在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。 1、修饰类:  当用final修饰一个类时,表明这个类是最终类,不能被继承。如果一个类你不想让它被继承,就可以用f...
  • chenrushui
  • chenrushui
  • 2016年07月14日 16:04
  • 728

重新认识java(六) ---- java中的另类:static关键字(附代码块知识)

你知道么,static的用法至少有五种?
  • qq_31655965
  • qq_31655965
  • 2017年01月28日 20:55
  • 3438
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:php面向对象的static关键字
举报原因:
原因补充:

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