主要内容:

  1. 创建类
  2. 成员方法
  3. 构造方法
  4. 析构方法
  5. 封装
  6. 继承
  7. 接口
  8. 多态
  9. 静态成员
  10. 常用关键字
  11. 常用魔术方法

从PHP5开始引入了面向对象的全部机制,面向对象的特性符合软件工程的3个目标:重用性,灵活性,扩展性

创建类

类前面不用public修饰,只要class,类的属性不能在初始化赋值(除非你写了构造方法来初始化赋值),属性的使用符号->,比如$aClass->name;

demo.php

<?php
//声明ren类,默认public,不写
class ren{
public $name;
public $sex;
public $age;
}
//实例化ren类
$xiaoli=new ren();
//设置name属性
$xiaoli->name="小李";
//获取name属性
echo $xiaoli->name; ?>

  输出

=》小李

成员方法

就是类中函数,只是在原先的函数声明前面加修饰符public,即可,调用方法$aClass->func(),在函数中使用该对象的属性使用关键字$this,比如$this->name;

class_func.php

<?php
//声明ren类,默认public,不写
class ren{
public $name;
public $sex;
public $age;
public function say(){
echo "我叫做".$this->name."<br/>";
}
}
//实例化ren类
$xiaoli=new ren();
//设置name属性
$xiaoli->name="小李";
//调用方法
$xiaoli->say(); ?>

  输出

我叫做小李

构造方法

在类的方法中的一个特殊的方法,默认为public(不需要写),,写法:__construct(){},注意前面是2个下划线。

可以使用构造方法进行对象的初始化赋值

每一次实例化对象(new),都会执行。

construct.php

<?php
//声明ren类,默认public,不写
class ren{
public $name;
public $sex;
public $age;
//成员方法
public function say(){
echo "我叫做".$this->name."<br/>";
echo "性别:".$this->sex."<br/>";
echo "年龄:".$this->age."<br/>";
}
//构造方法
function __construct($name,$sex,$age){
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
}
}
//实例化ren类,初始化对象赋值
$xiaoli=new ren("小李","男",25); //调用方法
$xiaoli->say(); ?>

  输出

我叫做小李
性别:男
年龄:25

析构方法

和构造方法名称类似,但是不能带任何参数,写法:function __destruct(){}

在销毁一个类之前执行一些操作或完成功能,在对象被销毁时自动执行。

destruct.php

<?php
//声明ren类,默认public,不写
class ren{
public $name;
public $sex;
public $age;
//成员方法
public function say(){
echo "我叫做".$this->name."<br/>";
echo "性别:".$this->sex."<br/>";
echo "年龄:".$this->age."<br/>";
}
//构造方法
function __construct($name,$sex,$age){
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
}
//析构方法
function __destruct(){
echo "<br/>$this->name 这个对象被销毁了。<br/>";
}
}
//实例化ren类,初始化对象赋值
$xiaoli=new ren("小李","男",25); //调用方法
$xiaoli->say(); //对象自动销毁,执行__destruct ?>

  输出

我叫做小李
性别:男
年龄:25 小李 这个对象被销毁了。

  也可以使用unset方法手动销毁对象,比如$unset($xiaoli)

unset.php

<?php
//声明ren类,默认public,不写
class ren{
public $name;
public $sex;
public $age;
//成员方法
public function say(){
echo "我叫做".$this->name."<br/>";
echo "性别:".$this->sex."<br/>";
echo "年龄:".$this->age."<br/>";
}
//构造方法
function __construct($name,$sex,$age){
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
}
//析构方法
function __destruct(){
echo "<br/>$this->name 这个对象被销毁了。<br/>";
}
}
//实例化ren类,初始化对象赋值
$xiaoli=new ren("小李","男",25);
$xiaobai=new ren("小白","女",23);
//调用方法
unset($xiaoli,$xiaobai); //对象自动销毁,执行__destruct ?>

  输出

小李 这个对象被销毁了。

小白 这个对象被销毁了。

  

封装

面向对象的3特性:封装,继承,多态

封装是面向对象的3特性之一(3特性为:封装,继承,多态)

类封装了代码,对象则封装了数据

访问关键字:public,private,protected

继承

这也是面向对象的3特性之一

继承使用的关键字为extends

继承可以拓展原先的类的属性和方法,还可以直接使用原先的类的属性和方法,节省了一大推敲代码的时间!

不过继承的是public,protected的属性和方法,至于private乃是师傅的私家珍藏(俗称“留一手”),是不会让继承的!

PHP的面向对象的设计,和Java语言的设计非常的类似,难道是copy“借鉴”了Java的吗?也许吧!

jicheng.php

<?php
//声明tool类
class tool{
function on(){
echo "<br/>启动<br/>";
}
function run(){
echo "运行<br/>";
}
function off(){
echo "关闭<br/>";
}
}
//继承tool类
class fan extends tool{
function app(){
$this->on();
$this->run();
$this->off();
}
}
$fan=new fan();
$fan->app(); ?>

  输出

启动
运行
关闭

  

接口

PHP5也是单继承的,只能extends一个类,但是可以实现(相当于继承)多个接口(接口相当于是所有方法都是抽象方法,抽象类)

接口的关键字interface,实现接口implements

interface.php

<?php
//声明接口
interface tool{
//全都是默认的public abstract 的方法
function on();
function run();
function off();
}
//实现接口
class fan implements tool{
function on(){
echo "<br/>风扇启动<br/>";
}
function run(){
echo "风扇运行<br/>";
}
function off(){
echo "风扇关闭<br/>";
}
} ?>

多态

由于PHP是弱类型语言,并不支持完全的多态。

多态就是根据不同的对象来做出不同的反应,运行同一个方法,但是得到的却是不同的结果。

duotai.php

<?php
//声明接口
interface tool{
//全都是默认的public abstract 的方法
function on();
function run();
function off();
}
//实现接口
class fan implements tool{
function on(){
echo "<br/>风扇启动<br/>";
}
function run(){
echo "风扇运行<br/>";
}
function off(){
echo "风扇关闭<br/>";
}
}
//实现接口
class engine implements tool{
function on(){
echo "<br/>发动机启动<br/>";
}
function run(){
echo "发动机运行<br/>";
}
function off(){
echo "发动机关闭<br/>";
}
}
//状态类
class toolStatus{
function ts($tool){
$tool->on();
$tool->run();
$tool->off();
}
} //应用多态
$fan=new fan();
$engine=new engine(); $toolStatus=new toolStatus();
$toolStatus->ts($fan);
$toolStatus->ts($engine); ?>

  输出

风扇启动
风扇运行
风扇关闭 发动机启动
发动机运行
发动机关闭

静态成员

类中一种特殊成员,不会被实例化到对象中,所以不用实例化对象即可调用。

关键字static,比如public static $name,public static function say(){};

在类的内部使用静态的成员使用关键字self::$name,self表示类,2个冒号是作用域限定符,$name就是静态成员。

在程序中使用静态成员,写法:

static.php

<?php
//声明tool类
class tool{
//声明静态方法
static function on(){
echo "<br/>启动<br/>";
}
function run(){
//内部调用静态方法
self::on();
echo "运行<br/>";
}
function off(){
echo "关闭<br/>";
}
} //外部调用静态方法,不用实例化对象
tool::on();
$fan=new tool();
$fan->run(); ?>

  输出

启动

启动
运行

常用关键字

final,被final(最终的)修饰的类不能被继承,修饰的属性不能被修改,比如public final function say(){}

clone,建立一个对象的副本,比如$newClass=clone $aClass;他会自动调用类的__clone(){}方法

常用的魔术方法

function  __construct($name,$age){}构造方法

function __destruct(){}析构方法

function __clone(){}拷贝方法

function __set($name,$value)设置方法

function __get($name)获取方法

function __call($func,$values)

function static __callStatic($func,$values)

PHP学习4——面向对象的更多相关文章

  1. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  2. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  3. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  4. 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类

    static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...

  5. C#学习笔记——面向对象、面向组件以及类型基础

    C#学习笔记——面向对象.面向组件以及类型基础 目录 一 面向对象与面向组件 二 基元类型与 new 操作 三 值类型与引用类型 四 类型转换 五 相等性与同一性 六 对象哈希码 一 面向对象与面向组 ...

  6. PHP学习之-面向对象

    PHP学习之-面向对象 1.什么是对象 "世界万物皆对象",一切可以被抽象出来的东西都是对象.像花,草.看不到的"概念"都是对象. 2.对象的基本组成 a.属性 ...

  7. 前端学习:JS(面向对象)代码笔记

    前端学习:JS(面向对象)代码笔记 前端学习:JS面向对象知识学习(图解) 创建类和对象 创建对象方式1调用Object函数 <body> </body> <script ...

  8. Python学习之==>面向对象编程(二)

    一.类的特殊成员 我们在Python学习之==>面向对象编程(一)中已经介绍过了构造方法和析构方法,构造方法是在实例化时自动执行的方法,而析构方法是在实例被销毁的时候被执行,Python类成员中 ...

  9. canvas学习和面向对象(二)

    Canvas 学习(二) 上一篇Canvas 学习(一)中我是用canvas绘制了一些基本和组合的图形. 现在开始绘制图片和动画帧,以及面向对象的升级版本. 还是一样,看代码,所有的代码都托管在git ...

  10. Python学习一(面向对象和函数式编程)

    学习了一周的Python,虽然一本书还没看完但是也收获颇多,作为一个老码农竟然想起了曾经荒废好久的园子,写点东西当做是学习笔记吧 对Python的语法看的七七八八了,比较让我关注的还是他编程的思想,那 ...

随机推荐

  1. Java的进程内缓存框架:EhCache

    EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider.   Ehcache缓存的特点: 1. 快速. 2. 简单. 3. 多种 ...

  2. Linux下查看yun rpm dpkg 软件是否安装成功的方法

    因为Linux安装软件的方式比较多,所以没有一个通用的办法能查到某些软件是否安装了. 总结起来就是这样几类: 一.rpm包安装的,可以用rpm -qa看到,如果要查找某软件包是否安装,用 rpm -q ...

  3. Ubuntu的中文乱码问题

    目标:使系统/服务器支持中文,能够正常显示. 1.首先,安装中文支持包language-pack-zh-hans: $ sudo apt-get install language-pack-zh-ha ...

  4. LAMPer 技能树

  5. Windows Server 2008 R2 下 Core界面

    Windows Server 2008 R2 下 Core界面 关于 sc 以及 net 命令 Sc 命令较不全面,仅仅是给服务发送一个开启或者关闭就结束了 Net 命令比较安全,它监视了整个服务的启 ...

  6. centos6,7中防火墙基本用法

    centos 7中 1.永久开放端口8080 firewall-cmd --zone=public --add-port=8080/tcp --permanent (添加端口后,重启防火墙后才能查看) ...

  7. Jmeter后置处理器之JSON Extractor

    一.使用场景 json extractor后置处理器用在返回格式为json的HTTP请求中,用来获取返回的json中的某个值.并保存成变量供后面的请求进行调用或断言等. 二.使用方法 步骤一:选择HT ...

  8. c 调用 lua 向lua函数 传递table

    参考 https://www.myvoipapp.com/blogs/yxh/2016/07/14/c%E5%90%91lua%E5%87%BD%E6%95%B0%E4%BC%A0%E9%80%92t ...

  9. CF765F Souvenirs 离线+线段树+主席树

    $ \color{#0066ff}{ 题目描述 }$ A县旁,连绵着一条长度为 n 的山脉,这条山脉由 n 座山峰组成,第 i 座山 峰的高度为 ai.作为著名的旅游县城,每天来到山脉游玩的旅客络绎不 ...

  10. typescript项目中import 图片时报错:TS2307: Cannot find module ‘...’

    最近在用typescript写项目时,我用import来加载一个图片,webpack编译文件是会报错如下: 报错: 解决: 如果在js中引入本地静态资源图片时使用import img from './ ...