/*OOP相关的代名词不做讲解*/

OOP的三大特征:

封装 - 继承 - 多态

-----------------------------------目录----------------------------------------

00x1 继承 extends

00x2 封装 private

00x3 静态关键词 static

00x4 Final关键词

00x5 接口

00x6 构造方法&构析方法

00x7 抽象类  详细地址:http://www.cnblogs.com/xishaonian/p/6165884.html

00x8 魔术方法(__set,__get,__isset,__unset,) 详细地址:http://www.cnblogs.com/xishaonian/p/6170459.html

00x9 switch http://www.cnblogs.com/xishaonian/p/6204061.html

0Ax1 多态 http://www.cnblogs.com/xishaonian/p/6206710.html

-------------------------------------------------------------------------------

STATIC


00x1 extends继承 案例一

在第二类声明中使用extends即可对第一个类进行继承。如下所示。

<?php
/**
* OOP学习小结
*/class Human
{
public $name;
public $var;
public $age; function run(){
echo "走路";
}
function eat(){
echo "吃饭";
}
function play(){
echo "运动";
}
}
/**
*
*/
class Student extends Human 使用extends对Human进行继承
{
public $school;
public $class; function study(){
echo "学习";
}
function readbook(){
echo "看书";
}
}
$a = new Student();
$a -> eat();
?>

 00x2 private封装 案例二

与之相关的还有很多相似的修饰符,比如public var等等。

封装一个属性或者类,在其前面直接加private即可。

调用一个类要用$this->,需要是在类的里面进行调用

<?php
/**
* 封装性
*/
class Human
{
private $name;
public $sex;
private $age; public function test(){
echo "我的名字是".$this->name."<hr />"; #在这里使用$this->进行调用name属性。
}
private function test2(){
echo "hello world";
} }
$a = new Human();
$a -> test();
$a -> test2(); #该条语句会出错。经过private封装的属性或者类都只能够在类里面自己调用。就好比自己家的老婆只有自己家才可以用一样。
?>

 00x3 static静态 案例三

 使用static效率会高一些,另外static是定义全局变量。

使用方法:

类名::属性或方法

<?php
class Human
{
var $name;
var $sex;
var $age; static function test(){
echo "hello world";
}
}
Human::test(); #调用Human类下的test方法。
?>
输出效果如下所示: hello world

 00x4 Final关键词 案例四

final的英译是“最终的”的意思,顾名思义其作用就是不允许子类对父类进行重写。

<?php
class Human
{
public $name;
public $sex;
public $age; final function test(){ #使用final关键词对test方法进行修饰,不允许子类修改这个方法。
echo "我很喜欢网络安全";
}
}
class Student extends Human
{
public function test(){ #修改test方法,顾名思义会出错。
echo "我相信我的努力会让我成为大牛!";
}
}
$a = new Student("张大牛","男",);
$a -> test();
?>

会提示如下错误(找不到test方法):

( ! ) Fatal error: Cannot override final method Human::test() in D:\wamp\www\1.php on line 17

00x5 接口

接口的声明使用interface

继承接口使用implements

<?php
/**
* 接口inface
*/
interface Human #定义一个接口
{
public function test(); #接口中不需要实现的方法
} class Student implements Human #接口的继承要用implements
{
function test(){
echo "hope me become IT killer";
}
}
$a = new Student("王大牛","男",);
$a -> test();
?>

00x6 构造方法&构析方法

构造方法

在程序开始的时候自动调用

<?php
class Student
{
function __construct()
{
echo "hello world <br />";
}
function test()
{
echo "this is a test";
}
}
$a = new Student();
$a ->test();
?>
输出效果如下所示:
hello world 
this is a test

构析方法,与构造相反,在程序最后的时候调用。

<?php
class Student
{ function __destruct()
{
echo "hello world";
}
function test()
{
echo "this is a test<br />";
}
}
$a = new Student();
$a ->test();
?>

00x7 抽象类

抽象类的声明使用:abstract

抽象类的作用可当做全局变量。在抽象类当中不需要有实现的方法,

抽象类还不能实例化,只能够被重写!

<?php
abstract class test
{
abstract function hello();
}
/**
*
*/
class class1 extends test
{ function hello(){
echo "hello world";
}
}
$a = new class1();
$a ->hello();
?>

 00x8 魔术方法

__get:在对象访问私有成员的时候自动被调用 #切记一定要有一个参数!

__set:要修改一个封装属性的时候自动调用

__isset:检测对象是否有具有某个私有成员的时候就会被自动调用!

__unset

第一个魔术和方法:__get

<?php
abstract class Date{
private $name;
private $sex;
private $age;
} class Student extends Date
{
public function __get($x){
echo "对不起,您无权查看学生隐私!";
}
}
$a = new Student();
echo $a -> name;
?>

第二个魔术方法:__set

<?php
class test
{
private $name;
private $sex;
private $age; function __set($x,$y) #在修改一个封装属性的时候该方法会自动调用!
{
echo "hello world";
}
}
$a = new test("王大牛","男",12);
$a -> name=("王大神");
?>
输出效果如下所示:
hello world

第三个魔术方法:__isset

<?php
class Human
{
public $name;
public $sex;
public $age; public function __construct($name,$sex,$age)
{
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
}
public function __isset($x) #在使用了isset判断属性存不存在的时候会自动调用该方法
{
echo "你想判断我的".$x."属性存在不存在<br />";
}
}
$a = new Human("王大牛","男",12);
if(isset($a -> sex))
{
echo "存在";
}else{
echo "不存在";
}
?>

第四个魔术方法:__unset

<?php
class Human
{
private $name;
private $sex;
private $age; function __construct($name,$sex,$age)
{
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
}
function __unset($x)
{
echo "成功删除该属性";
}
}
$a = new Human("郑大牛","男",12);
unset($a -> name);
?>

 00x9 switch

<?php
$a = ;
switch ($a) {
case $a < :
echo "{$a}小于100";
break;
case $a > :
echo "{$a}大于100";
break;
default:
echo "抱歉,你输入的可能不是数字!";
break;
}
?>

 0Ax1 多态

多态是OOP里三个重要的特征。其他两个是:继承、封装

<?php 

interface test
{
public function zhouchang();
public function mianji();
}
class juxing implements test
{
public $wide;
public $high; function __construct($wide,$high)
{
$this->wide = $wide;
$this->high = $high;
}
public function zhouchang()
{
echo "矩形的周长是:".($this->wide + $this->high)."<br />";
}
public function mianji()
{
echo "矩形的面积是:".($this->wide * $this->high)."<br />";
}
}
/**
*
*/
class yuanxing implements test
{ private $r; function __construct($r)
{
$this->r = $r;
}
public function zhouchang()
{
echo "圆形的周长是:".( * 3.14 * $this->r."<br />");
}
public function mianji()
{
echo "圆形的面积是:".(3.14 * $this->r * $this->r."<br />");
}
}
$a = new juxing(,);
$a -> zhouchang();
$a -> mianji();
$b = new yuanxing(,);
$b -> zhouchang();
$b -> mianji();
?>

OOP复习笔记的更多相关文章

  1. Java基础复习笔记系列 九 网络编程

    Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...

  2. Java基础复习笔记系列 八 多线程编程

    Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...

  3. Java基础复习笔记系列 七 IO操作

    Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...

  4. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

  5. Java基础复习笔记系列 四 数组

    Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...

  6. Java基础复习笔记基本排序算法

    Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...

  7. Angular复习笔记7-路由(下)

    Angular复习笔记7-路由(下) 这是angular路由的第二篇,也是最后一篇.继续上一章的内容 路由跳转 Web应用中的页面跳转,指的是应用响应某个事件,从一个页面跳转到另一个页面的行为.对于使 ...

  8. Angular复习笔记7-路由(上)

    Angular复习笔记7-路由(上) 关于Angular路由的部分将分为上下两篇来介绍.这是第一篇. 概述 路由所要解决的核心问题是通过建立URL和页面的对应关系,使得不同的页面可以用不同的URL来表 ...

  9. Angular复习笔记6-依赖注入

    Angular复习笔记6-依赖注入 依赖注入(DependencyInjection)是Angular实现重要功能的一种设计模式.一个大型应用的开发通常会涉及很多组件和服务,这些组件和服务之间有着错综 ...

随机推荐

  1. css004 用样式继承节省时间

       css004 用样式继承节省时间 继承:inherit 继承可以简化样式表 继承是有局限的,有些样式没法继承,如:border,width,height

  2. 使用js进行string和json之间转换的方法

    在数据传输过种中,json是以文本,即字符串的形式传递,字符串形似Json对象: var str1 = '{ "name": "Amy", "sex& ...

  3. 编译安装redis

    一.版本说明 CentOS版本 [root@localhost ~]# uname Linux [root@localhost ~]# uname -r 2.6.32-431.el6.i686 [ro ...

  4. JavaScript学习笔记——基本知识

    JavaScript学习的教程来自后盾网 1>JavaScript的放置和注释 1.输出工具 A.alert(); B.document.write(); C.prompt("&quo ...

  5. C# JIT & AOT

    http://msdn.microsoft.com/library/z1zx9t92 http://msdn.microsoft.com/en-us/library/ht8ecch6(v=vs.90) ...

  6. ecshop网站搬家缓存无法更新

    问题描述: 1.后台产品列表能改,数据也能看到,前端就是不显示 2.缓存无法删除 3.网上其他方法都试过,还是不行 症状:是因为缓存无法删除,无法更新,只需要能重新更新缓存文件即可.网站搬家丢失tem ...

  7. Robot Framework--06 用户关键字User Keyword

    转自:http://blog.csdn.net/tulituqi/article/details/7906130 在我们做自动化案例的时候,用的最多的主要是用户关键字.说到关键字,大体上可以分为测试库 ...

  8. @SuppressWarnings的使用、作用、用法

    在java编译过程中会出现很多警告,有很多是安全的,但是每次编译有很多警告影响我们对error的过滤和修改,我们可以在代码中加上 @SuppressWarnings(“XXXX”) 来解决 例如:@S ...

  9. QQ空间HD(1)-UIPopoverController基本使用

    UIPopoverController 是iPad的专属API ViewController.m #import "ViewController.h" #import " ...

  10. bootstrapValidator.js 做表单验证

    有这样的一个场景,我们在提交form表单的时候 可能要做一些验证,比如判断是不是为空,电话的格式验证,邮箱的格式验证等等,手写起来也是可以得. 但是今天我介绍一个bootstrap插件简化开发.就是b ...