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

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关键字创建一个对象则是另一个对象,调用的成员也是另一个新创建对象的成员。

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

不管是在对象内部使用$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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值