【十六】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/ ...
随机推荐
- asp.net热门框架
http://developer.51cto.com/art/201501/464292.htm
- ajax实现图片上传
1.创建formData表单,模拟表单传递数据(formData有兼容性问题) var formData = new FormData();2.获取到相应的元素 var jobName = $(&qu ...
- WinCHM 制作开发知识库,So easy!!!
开发过程中可能需要一些团队需要相互参照的东西,如前后台开发中的接口定义,团队开发规范,公用的类库,开发FAQ等 ,可以考虑用WinCHM这种工具制作开发知识库,然后发布至一Web服务器上,这样开发人员 ...
- codeSourcery交叉编译环境
arm-none-Linux-gnueabi-gcc是 Codesourcery 公司(目前已经被Mentor收购)基于GCC推出的的ARM交叉编译工具.可用于交叉编译ARM系统中所有环节的代码,包括 ...
- UnicodeEncodeError: 'utf-8' codec can't encode character '\udce4' in position 1: surrogates not allowed根本解决方法
下午开发新改的代码在print路径时出现上述问题,如下: Traceback (most recent call last): File "./update.py", line 6 ...
- RHEL6/7 x86_64下cachefilesd占用cpu达到100%
昨天,有个测试环境cachedfilesd CPU 100%,一直在跑了挺久,经查 1. CacheFiles介绍NFS是一种经常使用到的网络共享文件系统,在分布式环境下,多台服务器的文件共享是一个问 ...
- 为什么不应该使用ZooKeeper做服务发现
[编者的话]本文作者通过ZooKeeper与Eureka作为Service发现服务(注:WebServices体系中的UDDI就是个发现服务)的优劣对比,分享了Knewton在云计算平台部署服务的经验 ...
- vs2015 dx15开发教程一
- linux下网卡bonding配置(转)
linux下网卡bonding配置 章节 bonding技术 centos7配置bonding centos6配置bonding 一.bonding技术 bonding(绑定)是一种linux系统 ...
- py4CV例子3Mnist识别和ANN
1.什么是mnist数据集: , , ], ,,,,,,,,]], ., ., , , ], ,,,,,,,,]], ., ., , , ])) animals_net.setTermCriteri ...