PHP class 继承
1.执行结果
|
成员名 |
成员修饰符 |
方法名 |
方法修饰符 |
执行结果 |
|
name |
private |
setName |
private |
在构造函数函数中执行父类私有方法,子类未能覆盖private成员变量和方法,修改父类的私有变量 |
|
age |
private |
setAge |
public |
修饰符是public,子类方法覆盖父类方法,修改子类成员变量。但在父类构造其中执行$this->age只能取到父类的age |
|
local |
public |
setLocal |
public |
子类的方法和成员变量均覆盖了父类对应方法和成员变量 |
|
hoby |
public |
setLocal |
private |
成员变量被覆盖,当是方法未覆盖 |
2.相关代码
ParentClass.php
<?php
class ParentClass {
private $name;
private $age;
public $local;
public $hoby;
public function __construct() {
print "execute parent construct()<br/>";
$this->setName ();
echo ("name=" . $this->name . "<br/>"); $this->setAge ();
echo ("age=" . $this->age . "<br/>"); $this->setLocal ();
echo ("local=" . $this->local . "<br/>"); $this->setHoby ();
echo ("hoby=" . $this->hoby . "<br/>");
$this->__toString();
}
private function setName() {
$this->name = "parentName";
print "parent setName()\n ";
}
public function setAge() {
$this->age = 50;
print "parent setAge()\n";
}
public function setLocal() {
$this->local = "parent local";
print "parent setLocal()\n";
}
private function setHoby() {
$this->hoby = "parent hoby";
print "parent setHoby()\n";
} public function __toString() {
echo ("Parent[name=" . $this->name . ", age=" . $this->age . ", local=" . $this->local . ", hoby=" . $this->hoby . "]<br>");
}
} ?>
<?php
require_once 'ParentClass.php';
class ChildClass extends ParentClass {
private $name;
private $age;
public $local;
public $hoby;
public function __construct() {
print "execute child construct()<br/>";
parent::__construct ();
echo $this->__toString();
}
private function setName() {
$this->name = "childName";
print "child setName()\n";
}
public function setAge() {
$this->age = 20;
print "child setAge()\n";
}
public function setLocal() {
$this->local = "child local";
print "child setLocal()\n";
}
private function setHoby() {
$this->hoby = "child hoby";
print "child setHoby()\n";
}
public function __toString() {
echo ("Child[name=" . $this->name . ", age=" . $this->age . ", local=" . $this->local . ", hoby=" . $this->hoby . "]<br/>");
}
} $child = new ChildClass ();
?>
3.执行输出
execute child construct()
execute parent construct()
parent setName() name=parentName
child setAge() age=
child setLocal() local=child local
parent setHoby() hoby=parent hoby
Child[name=, age=20, local=child local, hoby=parent hoby]
Child[name=, age=20, local=child local, hoby=parent hoby]
PHP class 继承的更多相关文章
- javaScript的原型继承与多态性
1.prototype 我们可以简单的把prototype看做是一个模版,新创建的自定义对象都是这个模版(prototype)的一个拷贝 (实际上不是拷贝而是链接,只不过这种链接是不可见,给人们的感觉 ...
- JavaScript的继承实现方式
1.使用call或apply方法,将父对象的构造函数绑定在子对象上 function A(){ this.name = 'json'; } function B(){ A.call(this); } ...
- javascript中的继承与深度拷贝
前言 本篇适合前端新人,下面开始...... 对于前端新手来说(比如博主),每当对js的对象做操作时,都是一种痛苦,原因就是在于对象的赋值是引用的传递,并非值的传递,虽然看上去后者赋值给了前者,他们就 ...
- 谈谈一些有趣的CSS题目(四)-- 从倒影说起,谈谈 CSS 继承 inherit
开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...
- JS继承类相关试题
题目一: //有关于原型继承的代码如下:function Person(name) { this.name = name;}Person.prototype = { getName : f ...
- JS继承之寄生类继承
原型式继承 其原理就是借助原型,可以基于已有的对象创建新对象.节省了创建自定义类型这一步(虽然觉得这样没什么意义). 模型 function object(o){ function W(){ } W. ...
- JS继承之借用构造函数继承和组合继承
根据少一点套路,多一点真诚这个原则,继续学习. 借用构造函数继承 在解决原型中包含引用类型值所带来问题的过程中,开发人员开始使用一种叫做借用构造函数(constructor stealing)的技术( ...
- JS继承之原型继承
许多OO语言都支持两种继承方式:接口继承和实现继承.接口继承只继承方法签名,而实现继承则继承实际的方法.如前所述,由于函数没有签名,在ECMAScript中无法实现接口继承.ECMAScript只支 ...
- 深入浅出JavaScript之原型链&继承
Javascript语言的继承机制,它没有"子类"和"父类"的概念,也没有"类"(class)和"实例"(instanc ...
- 如果你也会C#,那不妨了解下F#(7):面向对象编程之继承、接口和泛型
前言 面向对象三大基本特性:封装.继承.多态.上一篇中介绍了类的定义,下面就了解下F#中继承和多态的使用吧.
随机推荐
- ubuntu定时执行任务——crontab的使用
先补上几个链接,后续再总结 #参考# http://www.cnblogs.com/kaituorensheng/p/4494321.html http://blogread.cn/it/articl ...
- 浅析Java基本数据类型
作为一种强类型语言,Java针对每一种数据都定义了明确的数据类型.大体来讲可分为:基本数据类型和引用数据类型:在此,主要讨论前者,后者以后再继续探究. Java基本数据类型分为四类八种: 1: 整数 ...
- Android内存优化(一)DVM和ART原理初探
相关文章 Android内存优化系列 Java虚拟机系列 前言 要学习Android的内存优化,首先要了解Java虚拟机,此前我用了多篇文章来介绍Java虚拟机的知识,就是为了这个系列做铺垫.在And ...
- Leetcode 1019. Next Greater Node In Linked List
单调栈的应用. class Solution: def nextLargerNodes(self, head: ListNode) -> List[int]: stack = [] ret = ...
- BaseCommand
import java.io.Serializable; import android.util.Log; public class BaseCommand implements Serializab ...
- 你该了解的10个 Python 模块
Python很优雅.使用以下模块有助于保持你的代码整洁.易于维护.欢迎补充. Docopt.忘了optparse和argparse吧,使用docstring来构建优雅的.高可读性.复杂(如果你有这个需 ...
- FastAdmin 学习线路 (2018-09-09 增加 Layer 组件)
FastAdmin 学习线路 (2018-09-09 增加 Layer 组件) 基础 HTML CSS DIV Javascript 基础 jQuery php 基础 对象 命名空间 Apache 或 ...
- 第15篇 PSR-04 规范
1. Overview This PSR describes a specification for autoloading classes from file paths. It is fully ...
- Restore Nexus 5 to Stock and Flash Factory Images
1.This is the website to download Factory Images for Nexus Devices https://developers.google.com/and ...
- debian下ror新建项目报错解决
一个是缺少mysql的开发包 sudo apt-get install libmysqld-dev 还有一个报错如下 debian ExecJS::RuntimeUnavailable: Could ...