2019-01-14

1. 类与对象

    (1)定义类时 类名不能有$。

           class COMPUTER{ }

定义类的属性时,属性时变量,要有$。

           class COMPUTER{

                    public $cpu="intel";

 }

对象使用属性时,直接用属性名,不能有$

        $computer=new COMPUTER();

       echo  ($computer->cpu);

定义函数时 函数名前不能有$

function test(){}

(2)构造方法与析构方法

构造 public function __construct(){}  都是两个下划线

析构public function __destruct(){}  一般在一个类里的最后部分定义。也可以手动关闭对象。使用unset($object);

(3)类常量

类常量是在类的内部定义的常量。一般是供类自己调用,而不是给类的对象调用。

<?php     class COMPUTER{

    const ONE=1; // const定义类常量

    const TWO=self::ONE+1; 

 //使用self来调用类常量,而不是用$this前者代表类自己,后者代表一个实例化对象)。

}

echo (COMPUTER::TWO);

?>

        :: 作用域限定操作符 (Scope Resolution Operator)可以引用类里面的常量,静态方法或者静态属性,而且不需要实例化。如在类外调用类的TWO属性。直接echo(COMPUTER::TWO);

也常结合parent用

class SubClass extends BaseClass {

    function __construct() {

        parent::__construct();

        print "我是 SubClass 下的构造函数\n";

    }

}

(4)extends(继承)与final关键字

final关键字后的类不允许继承,final关键字后的方法不能被重写

final class parent{}

(5)namespace命名空间

a.   文件1 namespace xx\xxxxx\xxxxx;

文件2 namespace xx\xxxxx;

假设文件1,2都有一个同名的类A,要在文件3使用两个A。建议在文件3 include两个文件后。用如下语句

use xx\xxxxx\xxxxx\A;

use xx\xxxxx\A as A2; //给文件2的A起个别名

b.  函数的处理方法有点不同,假设同名函数A().在文件3中用如下语句,多了个function.且use时函数名没有双括号

use function xx\xxxxx\xxxxx\A;

use function xx\xxxxx\A as A2; //给文件2的A()起个别名

c.常量则是将function换成const

d.在指定命名空间的文件内调用全局的类,函数,常量。需要在类,函数,常量前加反斜杠\  否则会把被调用的东西当做在该命名空间内的


加入反斜杠\  否则Test1()会被当做index\Test1()

(6)类的自动重载 

使用更先进的spl_autoload_register()函数。可以省去在main文件开头的一大串include "filename.php"

而一次性引入。

自动重载可以在文件中试用另一个文件的类。并且无需include。此处test类来源于另一文件test.php。当直接实例化时,发现本文件没有该类的声明,于是执行重载函数。$classname的值就是classes\test,即命名空间加类名。

下图的test文件内定义了test类,并声明了命名空间,在main中使用了test类。

test.php的命名空间是classes。不是modul\classes。否则$classname=modul\classes\test ,就变成                        require  modul\classes \test.php            main.php所在路径下无modul文件夹,无法引入。

建议在各个类文件中一来就定义命名空间 namespace xx\xxx\xxxx。且命名空间加上类名与该文件的项目路径一致。 

(7)static静态属性和方法

static过后的类和方法,相当于属于该类,可以不用实例化类。直接在类外用类名调用。在类的内部调用静态方法或静态属性用 self::xxx


静态方法同理

(8)后期静态绑定(static)

正常情况如下图所示,输出是 “A类的who方法”   self指的A类


没有静态绑定,虽然是B调用test(),但test()内的self还是指A类

下图是加了静态绑定static,会根据上下文判断当前调用的是谁,输出是“B类的who方法”


将self替换成static

(9)魔术方法

1. __set($name,$value){   

    $this->$name=$value;  // 用$this访问属性$name时,要加$(否则会把name当成一个固定的属性处理,而此处的$name显然是一个变量,意义是类里面的任何私有属性),而正常情况下对象访问属性取值是没有$的

}

2.__get($name){

    return $this->$name;

}

3.__isset($name){

    return isset($this->$name); //类外对象调用isset()查看私有属性是否存在时 

                                                //会首先访问__isset()查看是否存在该 私有属性

}

4.__unset()与上面同理

5.__call()方法 当在类外调用不存在的方法时,会转去执行__call()方法。这样程序不会因为找不到方法而终止,会继续执行下去


6.__callStatic()方法 针对静态方法


7.__invoke()  把对象当函数使用。参数传给__invoke()。


8.__toString()  直接打印对象时被调用

(10)对象拷贝和类型约束

1.   浅拷贝  (默认)

      $a=new A();

      $b=$a;  //浅拷贝a b指向同一块内存区,改变b的属性,a的属性也会变

2.深拷贝

        $a=new A();

         $b=clone $a;  //深拷贝,b的改变不会影响a 更占内存

3.__clone()魔术方法 解决作为属性值的对象的深拷贝


4. 类型约束 

就是 A $a;  //变量a时A类型的对象

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容