【十六】php 面向对象
__set()方法:
语法:
function __set($property, $value) {
//$property接收的属性的名字
//$value接收的是属性的值
}
1 class Employee{
2 public $name;
3 private $head;
4 protected $body;
5 function __set($propName,$propValue){
6 echo $propName."<br/>";
7 echo $propValue."<br/>";
8 }
9 }
10 $employee=new Employee();
11 $employee->name="mario"; //公共属性
12 $employee->title="executive chef"; //在Employee类中不存在的属性
13 $employee->head="my head"; //私有属性
14 $employee->body="my body"; //私有属性

__get()方法:
语法:
funciton __set($property) {
//$property接收的是属性的名字
}
1 class Employee{
2 public $publicname;
3 public $city;
4 protected $protectedvalue=15;
5 private $privatevalue;
6 function __get($propName){
7 echo "__get called<br/>";
8 $vars=array("publicname","city","protectedvalue");
9 if (in_array($propName, $vars)) {
10 return $this->$propName."<br/>";
11 }else{
12 return "no such variable<br/>";
13 }
14 }
15 }
16 $employee=new Employee();
17 $employee->publicname="huahua";
18 echo $employee->publicname."<br/>"; //公共属性
19 echo $employee->nothingvalue; //在Employee类中不存在的属性
20 echo $employee->protectedvalue; //私有属性
21 echo $employee->privatevalue; //私有属性

总结:从上图可以看出。
1.如果没有__set()和__get()方法,访问一个类中不存在的属性或没有访问权限的属性时,会报严重错误
2.当实例化一个对象后,调用类中不存在或者没有权限访问(protected、private)的属性的时候,php会默认调用__get()、__set()方法
3.属性为public,也会调用__get()和__set()方法
使用面向对象 写一个个人主页
page.inc.php
<?php
class page{
public $content;
public $title="tla consulting pty ltd";
public $keywords="tla consulting,three latter abbreviation,some of my best friends are search engines";
public $buttons=array("home"=>"home.php",
"contact"=>"contact.php",
"services"=>"services.php",
"site map"=>"map.php"
);
public function __set($name,$value){
$this->name=$value;
}
public function display(){
echo "<html>\n<head>\n";
$this->displaytitle();
$this->displaykeywords();
$this->displaystyles();
echo "</head>\n<body>\n";
$this->displayheader();
$this->displaymenu($this->buttons);
echo $this->content;
$this->displayfooter();
echo "</body>\n</html>\n";
}
public function displaytitle(){
echo "<title>".$this->title."</title>";
}
public function displaykeywords(){
echo "<meta name=\"keywords\" content=\"".$this->keywords."\"/>";
}
public function displaystyles(){
?>
<style>
h1{
color:white;font-size:24pt;text-align:center;
font-family:arial,sans-serif
}
.menu{
color:white;font-size:12pt;text-align:center;
font-family:arial,sans-serif;font-weight:bold
}
td{
background:black
}
p{
color:black;font-size:12pt;text-align:justify;
font-family:arial,sans-serif
}
p.foot{
color:white;font-size:9pt;text-align:center;
font-family:arial,sans-serif;font-weight:bold
}
a:link,a:visited,a:activep{
color:white
}
</style>
<?php
}
public function displayheader(){
?>
<table width=100% cellpadding="12" cellspacing="0" border="0">
<tr bgcolor="black">
<td align="left"><img src="logo.jpg"/></td>
<td>
<h1>huahua's page</h1>
</td>
<td align="right"><img src="logo.jpg"/></td>
</tr>
</table>
<?php
}
public function displaymenu($buttons){
echo "<table width=\"200\" bgcolor=\"white\" cellpadding=\"4\"cellspacing=\"4\">\n";
echo "<tr>\n";
$width=200/count($buttons);
while (list($name,$url)=each($buttons)) {
//注意: !$this->IsURLCurrentPage
$this->displaybutton($width,$name,$url,!$this->IsURLCurrentPage($url));
}
echo "</tr>\n";
echo "</table>\n";
}
public function IsURLCurrentPage($url){
//判断这个url是否指向当前页面.
//如果指向当前页面返回true
if (strpos($_SERVER['PHP_SELF'],$url)==false) {
return false;
}else{
return true;
}
}
public function displaybutton($width,$name,$url,$active=true){
if ($active) {
echo "<td width=\"".$width."%\">
<a href=\"".$url."\">
<img src=\"s-logo.jpg\" alt=\"".$name."\" border=\"0\"/></a>
<a href=\"".$url."\"><span class=\"menu\">".$name."</span></a>
</td>";
}else{
echo "<td width=\"".$width."%\">
<img src=\"side-logo.jpg\"><span class=\"menu\">".$name."</span></td>";
}
}
public function displayfooter(){
?>
<table width="100%" bgcolor="black" cellpadding="12" border="0">
<tr>
<td>
<p class="foot">©tla consulting pty ltd.</p>
<p class="foot">please see our<a href="">legal infotmation page</a></p>
</td>
</tr>
</table>
<?php
}
}
?>
home.php
<?php
require('page.inc.php');
$homepage=new page();
$homepage->title="huahua girl is best!";
$homepage->content="huahua girl have good good study,day day up!!!";
$homepage->display();
?>
service.php
<?php
require('page.inc.php');
class servicespage extends page{
private $roe2buttons=array(
"reengineering"=>"reengineering.php",
"standards compliance"=>"standards.php",
"buzzword conliance"=>"buzzword.php",
"mission statements"=>"mission.php"
);
//继承了page类 新增了及格菜单
public function display(){
echo "<html>\n<head>\n";
$this->displaytitle();
$this->displaykeywords();
$this->displaystyles();
echo "</head>\n<body>\n";
$this->displayheader();
$this->displaymenu($this->buttons);
$this->displaymenu($this->roe2buttons);
echo $this->content;
$this->displayfooter();
echo "</body>\n</html>\n";
}
}
$service=new servicespage();
$service->content="<p>this is service page</p>";
$service->display();
?>
界面显示:

【十六】php 面向对象的更多相关文章
- JavaScript学习笔记(十六)——面向对象编程
在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...
- Python之路(第二十六篇) 面向对象进阶:内置方法
一.__getattribute__ object.__getattribute__(self, name) 无条件被调用,通过实例访问属性.如果class中定义了__getattr__(),则__g ...
- JS基础入门篇(三十六)—面向对象( 三 )
1.class class es6 中 为 关键字用来声明 一个 类 1.只能通过new调用 2.不存在变量提升 3.多个方法之间直接书写,不需要,隔开 4.类的方法是直接定义在类的原型上的 5.定义 ...
- Java SE 第十六讲----面向对象特征之多态
1.多态:polymorphism:我们说的子类就是父类(玫瑰是花,男子是人),因此多态的意思就是:父类型的引用可以指向子类的对象 public class PolyTest { public sta ...
- Java SE 第十六讲----面向对象特征之继承
1.继承(inheritance):Java是单继承的,意味着一个类只能从另一个类继承(被继承的类叫做父类也叫[基类 baseclass]),继承的类叫做子类,java中的继承使用extends关键字 ...
- Py修行路 python基础 (十六)面向对象编程的 继承 多态与多态性 封装
一.继承顺序: 多继承情况下,有两种方式:深度优先和广度优先 1.py3/py2 新式类的继承:在查找属性时遵循:广度优先 继承顺序是多条分支,按照从左往右的顺序,进行一步一步查找,一个分支走完会走另 ...
- 201871010123-吴丽丽 《面向对象程序设计(Java)》第十六周学习总结
201871010123-吴丽丽 <面向对象程序设计(Java)>第十六周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...
- 201271050130-滕江南-《面向对象程序设计(java)》第十六周学习总结
201271050130-滕江南-<面向对象程序设计(java)>第十六周学习总结 博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.c ...
- 201871010111-刘佳华《面向对象程序设计(java)》第十六周学习总结
学号-姓名<面向对象程序设计(java)>第十六周学习总结 实验十四 应用程序归档与线程初步 实验时间 2019-12-12 第一部分:理论知识总结 1.程序与进程的概念 ‐程序是一段静 ...
- 201871010104-陈园园《面向对象程序设计(java)》第十六周学习总结
201871010104-陈园园<面向对象程序设计(java)>第十六周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...
随机推荐
- echart中间显示固定的字
- json.dumps(),json.loads(),json.dump(),json.load()方法的区别
1. json.dumps() json.dump()是将字典类型转化成字符串类型. import json dic = {'a':'1111','b':'2222','c':'3333','d':' ...
- 【gulp-sass】本地搭建sass开发环境
首先去官网下载一下nodejs. 然后安装gulp: 选择一个目录执行命令行:npm init,一直回车生成package.json文件 再执行命令:npm install gulp --save-d ...
- 合并两个JsonArray
//合并两个JSONArray public static String joinJSONArray(JSONArray mData, JSONArray array) { StringBuffer ...
- Oracle之用户和表空间
用户和表空间 看具体下载什么来操作?(oracle 11g,终端) 如果不在虚拟桌面, 它在整个总账项目里占什么位置? 如何使用? 不管学什么都要及时复习和总结,很重要. 增删改查 decode ...
- MySQL5.7 的新特点
1.安全性 MySQL 5.7 的目标是成为发布以来最安全的 MySQL 服务器,其在 SSL/TLS 和全面安全开发方面有一些重要的改变. mysql.user表结构升级 MySQL5.7用户表my ...
- 苹果笔记本充不进电怎么办_macbook充不进电解决办法
使用苹果Macbook的用户可能会遇到这种情况,使用一段时间后自己的苹果笔记本充不进电了,虽然充电器指示灯依然亮着,但是电池电脑一直充不进去,断开充电器后就直接关机的情况.通常碰到这种情况,很多用户都 ...
- Android之数据存储之SharedPreferences
SharedPreferences是以键值对形式存储数据,主要用于记录系统的设置,如飞行模式是否开启,声音大小的值等.//SharedPreferences方式保存到xml文件SharedPrefer ...
- 集合框架-ArrayList,Vector,Linkedlist
// ClassCastException 报错,注意,千万要搞清楚类型 * Vector的特有功能: * 1:添加功能 * public void addElement(Object obj) -- ...
- overture里设置踏板标记
在学习如何设置踏板标记之前,我们先来了解什么是踏板标记.踏板标记一般是使用在乐谱上,众所周知,钢琴有三个踏板,每个踏板的作用都不一样:右边的踏板称为“延音踏板”,是用来延长琴弦振动的时间,使音延长的效 ...