7.7.1 PHP常见的关键字
instanceof关键字
final关键字的应用
static关键字的使用
const关键字
instanceof关键字
“instanceof”操作符用于检测当前对象实例是否属于某一个类的类型。
<?php
class Person{ ... ... }
class Student extends Person{ ... ... }
$p=new Person();
$s=new Student();
echo $p instanceof Student; //结果为false
echo $s instanceof Student ; //结果为true
echo $s instanceof Person; //结果为true
final关键字的应用
在PHP5中新增加了final关键字,它只能用来修饰类和方法,不能使用final这个关键字来修饰成员属性,因为final是常量的意思,我们在PHP里定义常量使用的是define()函数和const关键字,所以不能使用final来定义成员属性。
final的特性:
使用final关键字标识的类不能被继承;
使用final关键字标识的方法不能被子类覆盖(重写),是最终版本;
目的:一是为了安全,二是没有必要
1.php
<?php
/*
*
*/
class Person {
public $name;
protected $age;
protected $sex;
function __construct($name, $age, $sex) {
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
}
public function say() {
echo "我的名子是:{$this->name},我的年龄是:{$this->age},我的性别是:{$this->sex}。<br>";
}
function eat() {
echo "11111111111111<br>";
}
function run() {
}
}
class Student extends Person{
var $school;
function __construct($name, $age, $sex, $school) {
parent::__construct($name, $age, $sex);
$this->school = $school;
}
function study() {
}
function say() {
parent::say();
echo "我所在的学校:{$this->school}<br>";
}
}
class Hello {
}
$p = new Person("高洛峰", 30, "男");
$s = new Student("妹子", 20, "女", "兄弟连");
if($s instanceof Person) {
echo "这个\$s是Person类的对象";
} else {
echo "对象不属于这个类";
}
// $s = new Student("妹子", 20, "女", "兄弟连");
// $s -> say();
2.php
<?php
/*
*
*/
final class Person {
public $name;
protected $age;
protected $sex;
function __construct($name, $age, $sex) {
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
}
public function say() {
echo "我的名子是:{$this->name},我的年龄是:{$this->age},我的性别是:{$this->sex}。<br>";
}
function eat() {
echo "11111111111111<br>";
}
function run() {
}
}
class Student extends Person{
var $school;
function __construct($name, $age, $sex, $school) {
parent::__construct($name, $age, $sex);
$this->school = $school;
}
function study() {
}
function say() {
parent::say();
echo "我所在的学校:{$this->school}<br>";
}
}
/*
*
* 在PHP中final不定义常量, 所以就不会使用,也不能使用final来修饰成员属性
*
*
* 1. final可以修饰类 --- 这个类不能去扩展, 不能有子类 (不让别人去扩展, 这个类是最终的类时)
*
* 2. final可以修饰方法
*
*/
$s = new Student("妹子", 20, "女", "兄弟连");
$s -> say();
3.php
<?php
/*
*
*/
class Person {
public $name;
protected $age;
protected $sex;
function __construct($name, $age, $sex) {
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
}
public final function say() {
echo "我的名子是:{$this->name},我的年龄是:{$this->age},我的性别是:{$this->sex}。<br>";
}
function eat() {
echo "11111111111111<br>";
}
function run() {
}
}
class Student extends Person{
var $school;
function __construct($name, $age, $sex, $school) {
parent::__construct($name, $age, $sex);
$this->school = $school;
}
function study() {
}
function say() {
parent::say();
echo "我所在的学校:{$this->school}<br>";
}
}
/*
*
* 在PHP中final不定义常量, 所以就不会使用,也不能使用final来修饰成员属性
*
*
* 1. final可以修饰类 --- 这个类不能去扩展, 不能有子类 (不让别人去扩展, 这个类是最终的类时)
*
* 2. final可以修饰方法 --- 这个方法,就不能在子类中覆盖(不让子类去改这个方法, 或扩展这个方法的功能时, 这个方法也就时最终的方法)
*
*/
$s = new Student("妹子", 20, "女", "兄弟连");
$s -> say();
test.php
<?php
/*
*
*/
class Person {
public $name;
protected $age;
protected $sex;
function __construct($name, $age, $sex) {
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
}
public function say() {
echo "我的名子是:{$this->name},我的年龄是:{$this->age},我的性别是:{$this->sex}。<br>";
}
function eat() {
echo "11111111111111<br>";
}
function run() {
}
}
class Student extends Person{
var $school;
function __construct($name, $age, $sex, $school) {
parent::__construct($name, $age, $sex);
$this->school = $school;
}
function study() {
}
function say() {
parent::say();
echo "我所在的学校:{$this->school}<br>";
}
}
/*
*
* 在PHP中final不定义常量, 所以就不会使用,也不能使用final来修饰成员属性
*
*
* 1. final可以修饰类 --- 这个类不能去扩展, 不能有子类 (不让别人去扩展, 这个类是最终的类时)
*
* 2. final可以修饰方法 --- 这个方法,就不能在子类中覆盖(不让子类去改这个方法, 或扩展这个方法的功能时, 这个方法也就时最终的方法)
*
*/
$s = new Student("妹子", 20, "女", "兄弟连");
$s -> say();