__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">&copy;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 面向对象的更多相关文章

  1. JavaScript学习笔记(十六)——面向对象编程

    在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...

  2. Python之路(第二十六篇) 面向对象进阶:内置方法

    一.__getattribute__ object.__getattribute__(self, name) 无条件被调用,通过实例访问属性.如果class中定义了__getattr__(),则__g ...

  3. JS基础入门篇(三十六)—面向对象( 三 )

    1.class class es6 中 为 关键字用来声明 一个 类 1.只能通过new调用 2.不存在变量提升 3.多个方法之间直接书写,不需要,隔开 4.类的方法是直接定义在类的原型上的 5.定义 ...

  4. Java SE 第十六讲----面向对象特征之多态

    1.多态:polymorphism:我们说的子类就是父类(玫瑰是花,男子是人),因此多态的意思就是:父类型的引用可以指向子类的对象 public class PolyTest { public sta ...

  5. Java SE 第十六讲----面向对象特征之继承

    1.继承(inheritance):Java是单继承的,意味着一个类只能从另一个类继承(被继承的类叫做父类也叫[基类 baseclass]),继承的类叫做子类,java中的继承使用extends关键字 ...

  6. Py修行路 python基础 (十六)面向对象编程的 继承 多态与多态性 封装

    一.继承顺序: 多继承情况下,有两种方式:深度优先和广度优先 1.py3/py2 新式类的继承:在查找属性时遵循:广度优先 继承顺序是多条分支,按照从左往右的顺序,进行一步一步查找,一个分支走完会走另 ...

  7. 201871010123-吴丽丽 《面向对象程序设计(Java)》第十六周学习总结

    201871010123-吴丽丽 <面向对象程序设计(Java)>第十六周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  8. 201271050130-滕江南-《面向对象程序设计(java)》第十六周学习总结

    201271050130-滕江南-<面向对象程序设计(java)>第十六周学习总结 博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.c ...

  9. 201871010111-刘佳华《面向对象程序设计(java)》第十六周学习总结

    学号-姓名<面向对象程序设计(java)>第十六周学习总结 实验十四  应用程序归档与线程初步 实验时间 2019-12-12 第一部分:理论知识总结 1.程序与进程的概念 ‐程序是一段静 ...

  10. 201871010104-陈园园《面向对象程序设计(java)》第十六周学习总结

    201871010104-陈园园<面向对象程序设计(java)>第十六周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

随机推荐

  1. <转>jmeter(六)元件的作用域与执行顺序

    本博客转载自:http://www.cnblogs.com/imyalost/category/846346.html 个人感觉不错,对jmeter讲解非常详细,担心以后找不到了,所以转发出来,留着慢 ...

  2. .NET 常用ORM之Gentle.Net

    .Net常用的就是微软的EF框架和Nhibernate,这两个框架用的都比较多就不做详细介绍了,今天我们来看看Gentle.Net,Gentle.Net是一个开源的优秀O/R Mapping的对象持久 ...

  3. ORM for Net主流框架汇总

    ORM框架:Object/Relation Mapping(对象/关系 映射)的缩写,易于理解的模型化数据的方法.简单的说就是把数据库的关系型数据类型转换为用对象型程序控制的框架类型. 框架优缺点分析 ...

  4. 清明 DAY2

    数论 数论是研究整数性质的东西 也就是 lim   π(x)=x/ ln x (x->无穷) 证明: ∵ p|ab ∴ ab有因子p 设 a=p1k1p2k2......prkr      b= ...

  5. 可视化的fineBI很高大上 使用简单,简单操作了一下,拖一拖就行,收费 只能看一下人家的demo 网站 http://demo.finebi.com/webroot/decision#directory

  6. Subversion版本控制系统的安装和操作.

    SVN的简单介绍 SVN是Subversoin的简称,是一个开源的版本控制系统 Subversion将文件存放在中心版本库里,这个版本库很像一个普通的文件服务器,不同的是,他可以记录每一次文件和目录的 ...

  7. python的shutil模块-文件的移动、复制、打包、压缩、解压等

    参考https://www.cnblogs.com/xiangsikai/p/7787101.html os模块提供了对目录或者文件的新建.删除.查看文件属性,还提供了对文件以及目录的路径操作,比如说 ...

  8. ORA-38301:can not perform DDL/DML Over Object in Recycle Bin 11.2.0.4

    我们最近有两台测试服务器在oci direct load期间出现下列异常: 从表象上看,是我们在对表执行ddl操作,确实内部也是用了truncate table XXX,可是这个XXX并不是回收站里面 ...

  9. Java程序员必备的Intellij插件(长期更新,截止到2018-05-03)

    善用Intellij插件可大幅提升我们的效率 以下是我用过不错的Intellij插件 1. .ignore 生成各种ignore文件,一键创建git ignore文件的模板,免得自己去写 截图:   ...

  10. openvpn server setup

    Set Up an OpenVPN Server client access 内部环境搭建