php面向对象中static静态属性和静态方法的调用

本文实例讲述了php中static静态属性和静态方法的调用。分享给大家供大家参考。具体如下:

这里分析了php面向对象中static静态属性和静态方法的调用。关于它们的调用(能不能调用,怎么样调用),需要弄明白了他们在内存中存放位置,这样就非常容易理解了。静态属性、方法(包括静态与非静态)在内存中,只有一个位置(而非静态属性,有多少实例化对象,就有多少个属性)。

实例:

<?php
header("content-type:text/html;charset=utf-8");
class Human{
 static public $name = "小妹";
 public $height = 180;
 static public function tell(){
 echo self::$name;//静态方法调用静态属性,使用self关键词
 //echo $this->height;//错。静态方法不能调用非静态属性
//因为 $this代表实例化对象,而这里是类,不知道 $this 代表哪个对象
 }
 public function say(){
 echo self::$name . "我说话了";
 //普通方法调用静态属性,同样使用self关键词
 echo $this->height;
 }
}
$p1 = new Human();
$p1->say();
$p1->tell();//对象可以访问静态方法
echo $p1::$name;//对象访问静态属性。不能这么访问$p1->name
//因为静态属性的内存位置不在对象里
Human::say();//错。say()方法有$this时出错;没有$this时能出结果
//但php5.4以上会提示
?>

结论:

(1)、静态属性不需要实例化即可调用。因为静态属性存放的位置是在类里,调用方法为"类名::属性名";
(2)、静态方法不需要实例化即可调用。同上
(3)、静态方法不能调用非静态属性。因为非静态属性需要实例化后,存放在对象里;
(4)、静态方法可以调用非静态方法,使用 self 关键词。php里,一个方法被self:: 后,它就自动转变为静态方法;

希望本文所述对大家的php程序设计有所帮助。

(0)

相关推荐

  • PHP5中的this,self和parent关键字详解教程

    首先我们来明白上面三个关键字: this,self,parent,从字面上比较好理解,是指这,自己,父亲,呵呵,比较好玩了,我们先建立几个概念,这三个关键字分别是用在什么地方呢?我们初步解释一下,this是指向当前对象的指针(我们姑且用C里面的指针来看吧),self是指向当前类的指针,parent是指向父类的指针.我们这里频繁使用指针来描述,是因为没有更好的语言来表达,呵呵,语文没学好. -_-# 这么说还不能很了解,那我们就根据实际的例子结合来讲讲. (1) this 复制代码 代码如下: <

  • php实现parent调用父类的构造方法与被覆写的方法

    本文实例讲述了php实现parent调用父类的构造方法与被覆写的方法.分享给大家供大家参考.具体分析如下: 覆写:被重新设计. 在子类中定义构造方法时,需要传递参数给父类的构造方法,否则我们得到的可能是一个构造不完整的对象. 要调用父类的方法,首先要找到一个引用类本身的途径:句柄(handle),PHP为此提供了parent关键字.   parent 调用父类的构造方法 要引用一个类而不是对象的方法,可以使用 ::(两个冒号),而不是 ->. 所以, parent::__construct()

  • 探讨PHP中this,self,parent的区别详解

    {一}PHP中this,self,parent的区别之一this篇面向对象编程(OOP,Object OrientedProgramming)现已经成为编程人员的一项基本技能.利用OOP的思想进行PHP的高级编程,对于提高PHP编程能力和规划web开发构架都是很有意义的.PHP5经过重写后,对OOP的支持额有了很大的飞跃,成为了具备了大部分面向对象语言的特性的语言,比PHP4有了很多的面向对象的特性.这里我主要谈的是this,self,parent 三个关键字之间的区别.从字面上来理解,分别是指

  • php class中self,parent,this的区别以及实例介绍

    一,this 1,要用this,你必有是一个对像的形势,不然它会报错的,Fatal error: Using $this when not in object context.2,this可以调用本类中的方法和属性,也可以调用父类中的可以调的方法和属性 二,self 1,self可以访问本类中的静态属性和静态方法,可以访问父类中的静态属性和静态方法.2,用self时,可以不用实例化的 三,parent 1,parent可以访问父类中的静态属性和静态方法.2,用parent时,可以不用实例化的 复

  • PHP 面向对象 final类与final方法

    final---用于类.方法前. final类---不可被继承. final方法---不可被覆盖. final类不能被继承. 如果我们不希望一个类被继承,我们使用final来修饰这个类.这个类将无法被继承.比如我们设定的Math类,涉及了我们要做的数学计算方法,这些算法也没有必要修改,也没有必要被继承,我们把它设置成final类型. 复制代码 代码如下: <? //声明一个final类Math final class Math{ public static $pi = 3.14; public

  • PHP编程过程中需要了解的this,self,parent的区别

    {一}PHP中this,self,parent的区别之一this篇 面向对象编程(OOP,Object Oriented Programming)现已经成为编程人员的一项基本技能.利用OOP的思想进行PHP的高级编程,对于提高PHP编程能力和规划web开发构架都是很有意义的. PHP5经过重写后,对OOP的支持额有了很大的飞跃,成为了具备了大部分面向对象语言的特性的语言,比PHP4有了很多的面向对象的特性.这里我主要谈的是 this,self,parent 三个关键字之间的区别.从字面上来理解,

  • PHP面向对象学习之parent::关键字

    前言 最近在做THINKPHP开发项目中,用到了 parent:: 关键字,实际上 parent::关键字 是PHP中常要用到的一个功能,这不仅仅是在 THINKPHP 项目开发中,即使是一个小型的企业站点,也会有许多相同的function功能,我们可以封装成一个父类 class,然后多个子类直接继承公共部分父类. PHP5中使用parent::来引用父类的方法. parent:: 可用于调用父类中定义的成员方法. parent::的追溯不仅于直接父类. 通过parent::调用父类方法 <!-

  • PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)

    面象对向的三大特点:封装性.继承性.多态性 首先简单理解一下抽象:我们在前面定义一个类的时候,实际上就是把一类事物共有的属性和行为提取出来,形成一个物理模型(模版),这种研究问题的方法称为抽象一.封装性 封装就是把抽取出来的数据和对数据的操作封装在一起,数据被保护在内部,程序的其他部分只有被授权的操作(方法)才能对数据进行操作. php提供了三种访问控制修饰符 public 表示全局,本类内部,类外部,子类都可以访问 protected 表示受保护的,只有本类或子类可以访问 private 表示

  • PHP中子类重载父类的方法【parent::方法名】

    在PHP中不能定义重名的函数,也包括不能再同一个类中定义重名的方法,所以也就没有方法重载.单在子类中可以定义和父类重名的方法,因为父类的方法已经在子类中存在,这样在子类中就可以把从父类中继承过来的方法重写. 子类中重载父类的方法就是在子类中覆盖从父类中继承过来的方法,父类中的方法被子类继承过来不就可以直接使用吗?为什么还要重载呢?因为有一些情况我们必须要覆盖的.例如,有一个"鸟"类,在这个类中定义了鸟的通用方法"飞翔".将"鸵鸟"类作为它的子类,

  • PHP面向对象之旅:深入理解static变量与方法

    static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为"类属性"或"类方法". 如果访问控制权限允许,可不必创建该类对象而直接使用类名加两个冒号"::"调用. static关键字可以用来修饰变量.方法. 不经过实例化,就可以直接访问类中static的属性和static的方法. static 的属性和方法,只能访问static的属性和方法,不能类访问非静态的属性和方法.因为静态属性和方法被创建时

随机推荐