php oop关键字,OOP面向对象基础-关键字

final

用于修饰方法和类,不能修饰属性

特点:

1. final修饰的类不能被继承

2. 用final 修饰的方法不能被覆盖重写==

应用:

登录时,账号密码的验证

static 静态

定义:用于修饰属性和方法, 不能修饰类

修饰的属性:静态属性 只能使用静态方式去访问, 在类的外面调用 类名::$属性名 内部 self::$属性名

修饰的方法:静态方法 只能使用静态方式去访问, 在类的外面调用 类名::$方法名 内部 self::$方法名

静态方法里面不能出现 $this ,静态的属性值不能修改

类中的一些方法没什么联系可以把他们设置为静态方法

实现设计模式

class Person

{

public static $name = '小小';

private static $age = '18';

public function show(){

echo self::$age;

// echo $this->name; 方法使用static后,不能使用$this

}

public function show2(){

echo self::show().",hahaha";

}

public static function show3(){

echo self::$name;

}

}

$a = new Person();

//$a ->show();

$a ->show2();

//外部调用

Person::$name;

Person::show3();

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

classPerson

{

publicstatic$name='小小';

privatestatic$age='18';

publicfunctionshow(){

echoself::$age;

//        echo $this->name;  方法使用static后,不能使用$this

}

publicfunctionshow2(){

echoself::show().",hahaha";

}

publicstaticfunctionshow3(){

echoself::$name;

}

}

$a=newPerson();

//$a ->show();

$a->show2();

//外部调用

Person::$name;

Person::show3();

单例设计模式

http://www.cnblogs.com/siqi/archive/2012/09/09/2667562.html

分析:

一个类只允许一个对象使用

先禁止生成对象

设置为静态方法

静态方法里实例化对象

判断是否存在

例子

class Demo

{

private static $obj = null;

//禁止生成对象

private function __construct()

{

}

public static function getObj(){

if(self::$obj == null){

return self::$obj = new Demo();

}else{

return self::$obj;

}

}

}

$a = Demo::getObj();

$b = Demo::getObj();

$c = Demo::getObj();

var_dump($a);

var_dump($b);

var_dump($c);

//输出结果:

// object(Demo)#1 (0) { } object(Demo)#1 (0) { } object(Demo)#1 (0) { } YES

//两个等号,判断是否是同类,三个等号,值等方面是否相同

if($a === $b){

echo "YES";

}else{

echo "NO";

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

例子

classDemo

{

privatestatic$obj=null;

//禁止生成对象

privatefunction__construct()

{

}

publicstaticfunctiongetObj(){

if(self::$obj==null){

returnself::$obj=newDemo();

}else{

returnself::$obj;

}

}

}

$a=Demo::getObj();

$b=Demo::getObj();

$c=Demo::getObj();

var_dump($a);

var_dump($b);

var_dump($c);

//输出结果:

// object(Demo)#1 (0) { } object(Demo)#1 (0) { } object(Demo)#1 (0) { } YES

//两个等号,判断是否是同类,三个等号,值等方面是否相同

if($a===$b){

echo"YES";

}else{

echo"NO";

}

const

const 常量名 = 常量值;

不能进行运算,if/循环 里面不能使用const定义常量

可以在类里面定义 ,在类的内部使用 self::常量名

可以在类里面定义 ,在类的外部使用 类名::常量名

define:不能定义再类里面定义

class Person

{

const A = 'aaaa';

public static function show(){

echo self::A;//可以在类里面定义 ,在类的内部使用 self::常量名

}

}

//Person::show();//aaaa

echo Person::A;//aaaa 可以在类里面定义 ,在类的外部使用 类名::常量名

1

2

3

4

5

6

7

8

9

10

11

classPerson

{

constA='aaaa';

publicstaticfunctionshow(){

echoself::A;//可以在类里面定义 ,在类的内部使用 self::常量名

}

}

//Person::show();//aaaa

echoPerson::A;//aaaa  可以在类里面定义 ,在类的外部使用 类名::常量名

instanceof 关键字

判断一个对象是否属于某个类 或该类的子类的实例

$c instanceof A

(实例化的对象 instanceof 类名)

class A{}

class B{}

class C extends A{}

$a = new A();

$b = new B();

$c = new C();

if($c instanceof A){

echo "YES";

}else{

echo "NO";

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

classA{}

classB{}

classCextendsA{}

$a=newA();

$b=newB();

$c=newC();

if($cinstanceofA){

echo"YES";

}else{

echo"NO";

}

clone 克隆对象

对象的引用赋值,

克隆语法 $a = clone $b;

class A

{

public $name = 'zz';

}

$a = new A;

//var_dump($a);//object(A)#1 (1) { ["name"]=> string(2) "zz" }

//$a->name = 'xx';

//$b = $a;

//var_dump($b);//object(A)#1 (1) { ["name"]=> string(2) "xx" }

//var_dump($a);//object(A)#1 (1) { ["name"]=> string(2) "xx" }

var_dump($a);

$c = clone $a;

var_dump($c);

//object(A)#1 (1) { ["name"]=> string(2) "zz" } object(A)#2 (1) { ["name"]=> string(2) "zz" }

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

classA

{

public$name='zz';

}

$a=newA;

//var_dump($a);//object(A)#1 (1) { ["name"]=> string(2) "zz" }

//$a->name = 'xx';

//$b = $a;

//var_dump($b);//object(A)#1 (1) { ["name"]=> string(2) "xx" }

//var_dump($a);//object(A)#1 (1) { ["name"]=> string(2) "xx" }

var_dump($a);

$c=clone$a;

var_dump($c);

//object(A)#1 (1) { ["name"]=> string(2) "zz" } object(A)#2 (1) { ["name"]=> string(2) "zz" }

__clone魔术方法

在该对象被克隆时,自动调用

作用 :

1. 如果封装该方法,那么会使对象不能被克隆

2. 将属性里对象值,在被克隆时,也进行克隆

3. 在被克隆时候,可以重置或更改相关属性


//克隆 对象中有对象,克隆时,都增加

//object(B)#3 (1) { ["obj"]=> object(A)#4 (1) { ["name"]=> string(3) "aaa" } }

class A

{

public $name = "aaa";

}

class B

{

public $obj = null;

public function __construct($obj)

{

//实例化的时候传入一个对象

$this->obj = $obj;

}

public function __clone()

{

$this->obj = clone $this->obj;

}

}

$m = new B(new A);

var_dump($m);

$n = clone $m;

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23


//克隆   对象中有对象,克隆时,都增加

//object(B)#3 (1) { ["obj"]=> object(A)#4 (1) { ["name"]=> string(3) "aaa" } }

classA

{

public$name="aaa";

}

classB

{

public$obj=null;

publicfunction__construct($obj)

{

//实例化的时候传入一个对象

$this->obj=$obj;

}

publicfunction__clone()

{

$this->obj=clone$this->obj;

}

}

$m=newB(newA);

var_dump($m);

$n=clone$m;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值