public、private、protected/抽象类和接口/final、static、clone

1、public

可以在类内、类外被其他的类和对象调用。子类可以继承和使用父类中所有的公共成员。

对于成员方法,如果没有写关键字,默认就是public。

2、private

只能在所属类的内部被调用和修改,不可以在类外被访问,即使是子类中也不可以。

3、protected

可以在本类和子类中被调用,其他地方则不可以被调用。


4、类的继承

(1) class 子类名称 extends 父类名称{      }

(2) parents:: 父类的成员方法(参数);    //通过parent::关键字在子类中调用父类中的成员方法


5、抽象类和接口

抽象类和接口都是不能被实例化的特殊类。它们都是配合面向对象的多态性一起使用。

(1) 抽象类只能作为其他类的父类来使用。

    abstract class 抽象类名称{

                  //抽象类的成员变量列表

                  abstract function 成员方法1(参数);     

                  abstract function 成员方法2(参数);

    }

抽象类和普通类相似,包含成员变量、成员方法。两者的区别在于:抽象类至少要包含一个抽象方法。抽象方法没有方法体,其功能的实现只能在子类中完成。抽象方法也是使用abstract关键字来修饰。

抽象类和抽象方法主要应用于复杂的层次关系中,这种层次关系要求每一个子类都包含并重写某些特定的方法。

(2)接口

继承特性简化了对象、类的创建,增加了代码的可重用性。但PHP只支持单继承。如果想实现多重继承,就要使用接口。PHP可以实现多个接口。

interface 接口名称{

        //常量成员                                      //接口中不能声明变量,只能使用const关键字声明为常量的成员属性

        //抽象方法                                      //成员方法必须是抽象方法

}//接口中所有成员必须具备public的访问权限

接口之间可以使用extends实现继承。

接口可以直接使用接口名称在接口外去获取常量成员的值。

在子类中继承接口使用implements关键字。实现多个接口的继承,每个接口之间使用逗号连接。

class 子类名 implements 接口1,接口2{        }

**既然通过子类继承了接口中的方法,那么接口中的所有方法必须都在子类中实现,否则PHP将抛出错误信息。


6、final关键字

被final修饰过的类和方法就是“最终的版本”,

final class class_name{

//..

}

说明该类不可以再被继承,也不能再有子类。

final function method_name()

说明该方法在子类中不可以进行重写,也不可以被覆盖。


7、static关键字——声明静态类成员

静态属性和静态方法不需要在被类实例化的情况下就可以直接使用。在对象被销毁后,仍然保存被修改的静态数据,以便下次继续使用。

(1) 静态属性

静态属性就是使用static修饰的成员属性,它属于类本身而不属于类的任何实例。它相当于存储在类中的全局变量,可以在任何位置通过类来访问。静态属性访问的语法如下:

类名称::$静态属性名称

其中“::”被称为范围解析操作符,用于访问静态成员、静态方法和常量,还可以用于覆盖类中的成员和方法。

如果要在类内部的成员方法中访问静态属性,那么在静态属性的名称前加上操作符"self::"即可。

(2)静态方法

静态方法不受任何对象的限制,可以不通过类的实例化直接引用类中的静态方法。

类名称::静态方法名称([参数1,参数2,....])

同样如果要在类内部的成员方法中引用静态方法,那么在静态方法的名称前加上操作符"self::"即可。

**在静态方法中,只能调用静态变量,而不能调用普通变量,普通方法则可以调用静态变量。

8、clone关键字——克隆对象

使用clone克隆的对象与原对象没有任何关系,它是将原对象从当前位置重新复制了一份,也就是相当于在内存中新开辟了一块空间。

$克隆对象名称=clone $原对象名称;

对象克隆成功后,它们中的成员方法、属性以及值是完全相同的。如果要为克隆后的副本对象在克隆时重新为成员属性赋初始值,那么就要用到魔术方法“__clone()”。

“__clone()”自动包含$this和$that两个对象的引用,$this是副本对象的引用,$that是原本对象的引用。

<?php
class Book{							//类Book
	private $object_type = 'book';				//声明私有变量$object_type,并赋初值为book
	public function setType($type){				//声明成员方法setType,为变量$object_type赋值
		$this -> object_type = $type;
	}
	public function getType(){				//声明成员方法getType,返回变量$object_type的值
		return $this -> object_type;
	}
	public function __clone(){				//声明__clone()方法
		$this ->object_type = 'computer';	//将变量$object_type的值修改为computer
	}
}
$book1 = new Book();						//实例化对象$book1
$book2 = clone $book1;						//使用普通数据类型的方法给对象$book2赋值
echo '对象$book1的变量值为:'.$book1 -> getType();	//输出对象$book1的值
echo '<br>';
echo '对象$book2的变量值为:'.$book2 -> getType();
?>


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值