Php重写父类静态方法,类声明与类的实例化+类常量与类属性的重载+类的继承与方法重写+类中静态成员的声明与访问...

类的声明与实例化

实例

/**

*类的声明与实例化

*/

class demo1//声明类

{

public  $name = 'zhangsan';

public function __construct()

{

echo 'Hello world.';

}

$demo1 = new Demo1();//实例化类

运行实例 »

点击 "运行实例" 按钮查看在线实例

2.类常量与类属性的重载

实例

/**

*类常量与类属性的重载

*/

class demo2//声明类

{

const  APP_NAME = 'PHP';//类常量

private $age = 28;

private $name = 'lisi';

private $sex = 1;

private $salary = 3800;

//类属性的重载

public function __get($str)

{

if(isset($this->$str))

{

return $this->$str;

}else{

return '属性不存在';

}

}

public function __set($str,$value)

{

if($str == 'age')

{

return  $str.'不允许修改';

}else{

$this->$str = $value;

}

}

public function __isset($str)

{

if ($str == 'salary')

{

return false;

}

return isset($this->$str);

}

public function __unset($str)

{

if ($str == 'salary')

{

return '不能销毁';

}

unset($this->$str);

}

}

$demo2 = new Demo2();//实例化类

echo $demo2::APP_NAME,'
';//类常量的调用

//获取

echo $demo2->age,'
';

echo $demo2->height,'
','


';

//设置

$demo2->age = 40 ;

$demo2->salary = 4800;

echo $demo2->age,'
';

echo $demo2->salary,'
','


';

//检测

echo isset($demo2->salary) ? '存在' : '不存在' ,'
';

echo isset($demo2->name) ? '存在' : '不存在' ,'
','


';

//销毁

unset($demo2->sex);

echo $demo2->sex,'
';

unset($demo2->salary);

echo $demo2->salary,'
','


';

运行实例 »

点击 "运行实例" 按钮查看在线实例

3.类的继承与方法重写

实例

/**

* 对象三要素之: 继承与多态

* 1. 继承是指类之间的继承,是代码复用的重要手段,之前我们是通过"函数"实现的代码复用

* 2. 继承使用关键字: extends

* 3. 引用父类成员: parent::

* 4. 子类可以将父类中的公共和受保护成员全部继承

*/

class Demo3

{

//父类属性

const APP_NAME = 'PHP';

public $name;

protected $age;

private $salary;

//父类构造器

public function __construct($name, $age)

{

$this->name = $name;

$this->age = $age;

}

//属性访问重载

public function __get($name)

{

if (isset($this->$name)) {

return $this->$name;

}

return '非法属性';

}

}

class Demo4 extends Demo3

{

//子类自有属性

private $sex;

const APP_NAME = 'HTML';  //类常量可以在子类中重写

//子类将父类同名方法进行重写,根据传入参数不同,实现不同的功能,这就是多态性

public function __construct($name, $age, $sex='male')

{

//引用父类的构造方法来简化代码

parent::__construct($name, $age);

$this->sex = $sex;

}

//将父类属性重载方法重写后,顺利读取子类属性

//所以属性重载方法__get()应该设置在最终工作类中(例如本类Demo4),而不是父类Demo3中

//此时,将父类Demo3中的__get()删除,代码执行仍然正确

public function __get($name)

{

if (isset($this->$name)) {

return $this->$name;

}

return '非法属性';

}

}

//当前类Demo4中即使没有任何成员,一样可以访问父类成员

$demo4 = new Demo4('zhangsan', 28);

//访问父类中的属性

echo $demo4->name,'
';

echo $demo4->age,'
';

echo $demo4->salary,'
';   // 父类私有属性子类不可见,访问不到

echo Demo4::APP_NAME, '
';  // 访问类常量

echo $demo4->sex, '
'; //取不值,因为父类__get()不能识别子类属性

运行实例 »

点击 "运行实例" 按钮查看在线实例

4类中静态成员的声明与访问

实例

/**

* 类中的静态成员与访问

* 1.类中静态成员使用关键字:static 定义;

* 2.静态成员包括: 静态属性和静态方法;

* 3.静态成员是属于类的,我们应该终终使用类来访问;

* 4.静态属性必须使用类来访问,而静态方法即可以用类,也可以用对象访问;

* 5.静态成员是可以有访问限制的: public,protected,private;

* 6.静态成员与对象无关,所以内部不允许使用伪变量: $this;

* 7.访问时,类名后必须使用:范围解析符:双冒号[::]

* 8.在类中引用自身使用关键字: self::

*

* 范围解析符的作用:

* 1. 访问静态成员;

* 2. 访问类常量;

* 3. 继承上下文中引用被覆盖成员

*/

class Demo5

{

public static $name = '张三';

public static $age = 28;

public static $salary = 3000;

public static function getMassge()

{

return '姓名:'.self::$name.',年龄:'.self::$age.',工资:'.self::$salary;

}

}

//访问静态成员:无需实例化

echo demo5::$name,'
';

echo demo5::getMassge();

运行实例 »

点击 "运行实例" 按钮查看在线实例

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值