PHP之面向对象的程序设计(一)

来源:互联网 发布:dota2新人选手知乎 编辑:程序博客网 时间:2024/04/30 11:11

PHP之类与对象

const与define的区别

const是用于类成员常量的定义了,定义之后不可改,而define我们定义的是全局常量了, 这样我们在其它地方访问但不能改变了,具体还有一些细节我们下面给各位列出来吧

注意:define不能定义在类中,而const必须定义在类中,并且const必须通过类名::变量名来进行访问

  1. const用于类成员变量定义,一旦定义且不能改变其值。define定义全局常量,在任何地方都可以访问。
  2. define不能在类中定义而const可以。
  3. const不能在条件语句中定义常量

  4. const采用一个普通的常量名称,define可以采用表达式作为名称。

  5. const只能接受静态的标量,而define可以采用任何表达式。
  6. const 总是大小写敏感,然而define()可以通过第三个参数来定义大小写不敏感的常量
  7. 使用const简单易读,它本身是一个语言结构,而define是一个方法,用const定义在编译时比define快很多。

对象中成员的访问

访问对象的成员通过对象的引用来访问:

例如:

对成员属性的访问包括赋值操作和获取成员属性的操作。

访问对象中的成员和访问数组中的元素类似。只能通过对象的引用来访问对象中的每个成员。

$引用名 = new 类名称([参数数列表]);    //对象实例化格式$引用名 -> 成员属性 = 值;           //对成员属性赋值的操作$echo $引用名 -> 成员属性;         //获取成员属性的值$引用名 -> 成员方法;               //访问对象中的成员方法

如果对象中的成员不是静态的那么,“对象引用名->属性”或“对象引用名->方法”是唯一的访问形式。

特殊的对象引用”$this”

不管是在对象的外部还是在对象的内部,访问对象中的成员都必须使用对象的引用变量。

但对象创建完成以后,对象的引用名称无法在对象的方法中找到。

如果在对象的方法中再使用new关键字创建一个对象则是另一个对象,调用的成员也是另一个新创建对象的成员。

对象一旦被创建,在对象中的每个成员方法里面都会存在一个特殊的对象引用“thisthis引用就代表哪个对象,专门用来完成对象内部成员之间的访问。

不管是在对象内部使用$this访问自己对象内部的成员,还是在对象外部通过对象的引用名称访问对象中的成员。都需要使用特殊的运算符”->”

header("Content-type:text/html;charset=utf-8");class Person{    public $name;    public $sex;    public $age;    function say(){        echo"我的名字:".$this->name." 性别:".$this->sex." 年龄".$this->age;    }    function run(){        echo$this->name."在走路<br>";    }}$a =new Person();$a -> name="jack";$a -> sex = 'man';$a -> age = 15;$a -> say();$a -> run();

PHP类的静态(static)方法和静态(static)变量使用介绍

在php中,访问类的方法/变量有两种方法:

  1. 创建对象object=newClass()使>object->attribute/function,前提是该变量/方法可访问。

  2. 直接调用类方法/变量:class::attribute/function,无论是静态/非静态都可以。但是有前提条件:

    - 如果是变量,需要该变量可访问。- 如果是方法,除了该方法可访问外,还需要满足:- 如果是静态方法,没有特殊条件;-  如果是非静态方法,需要改方法中没有使用$this,即没有调用非静态的变量/方法,当然,调用静态的变量/方法没有问题。

然后我们再看一下使用$object->… 和使用class::… 都有什么区别:

  1. 使用$object->… ,需要执行构造函数创建对象;
  2. 使用class::… 调用静态方法/变量,不需要执行构造函数创建对象;
  3. 使用class::… 调用非静态方法/变量,也不需要执行构造函数创建对象。

然后奇怪的地方就出来了,既然2和3都一样,那静态方法/变量存在还有什么意义呢?

差异还是显然存在的,如下:

  1. 静态变量

静态成员只保留一个变量值,而这个变量值对所有的实例都是有效,也就是说,所有的实例共享这个成员。

  1. 静态方法

静态方法可以直接使用class::… 来调用,而非静态方法需要满足一定限制条件才能使用class::.. 的方法调用

header("Content-type:text/html;charset=utf-8");class Person{    static $name;    static $sex;    static $age;    function say(){        echo"我的名字:".self:: $name." 性别:".self:: $sex." 年龄".self:: $age;    }    function run(){        echo self:: $name."在走路<br>";    }}Person:: $name   = '李四';Person:: $sex  = '男';Person:: $age = 15;$a =new Person();$a -> say();$a -> run();
0 0