PHP从入门到精通

之PHP的面相对象编程

   面向对象编程(Object Oriented Programming, OOP, 面向对象程序设计)是一种计算机编程架构,OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。面向对象一直是软件开发领域内比较热门的话 题,为编程人员敞开了一扇大门,使其编程的代码 更简洁、更易于维护,并且具有更强的可重用性。有人说PHP不是一个真正的面向对象的语言,这是事实。PHP 是一个混合型语言,你可以使用OOP,也可以使用传统的过程化编程。然而,对于大型项目,你可能需要在PHP 中使用纯的OOP去声明类,而且在你的项目里只用对象和类。

   首先我们来了解一些面向对象编程的基础知识:

面向过程和面向对象

1、面向过程:专注于解决一个问题的过程。面向过程的最大特点,是由一个个的函数去解决处理这个问题的一系列过程;
2、面向对象:专注于由哪个对象来处理一个问题。面向对象的最大特点,是由一个个具有属性和方法的功能的类,从类中拿对象,进而处理问题;

面向对象:
1、什么是类?
具有相同属性(特征)和方法(行为)的一系列个体的集合。类是一个抽象的概念。

2、什么是对象?
从类中拿到的具有具体属性的个体,称为对象。对象是一个具体的个体。

3、类和对象的关系?
类是对象的抽象化,对象是类的具体化。
类仅仅表明这类对象有哪些属性。但是不能有具体的值,所以类是抽象的。
而对象,是将类所有属性赋值后,产生具体的个体,所以对象是具体的。

类的声明与实例化

1、如何声明一个类?
class 类名{
访问修饰符 $属性;
[访问修饰符] function 方法(){};
}

2、声明一个类的注意事项?
①类名只能有字母数字下划线组成,开头不能是数字,必须符合大驼峰法则;
②类名必须使用class修饰,类名后面一定不能有();
③属性必须带访问修饰符;方法可以不带访问修饰符;

3、实例化对象及对象属性方法的调用:
$对象名=new 类名();//()可带可不带;

类外部调用属性和方法:
$对象名->属性名;//使用->调用属性时,属性名不能带$符号!!

类内部调用属性和方法:
$this->属性名;

声明类的代码示例:

class Person{
var $name;
function Person($name){
$this->name=$name;
} }
类中常见的修饰符

常见的访问修饰符有:public、protected、private、var等。

用法如下:

class Person{
public $name;
public function Person($name){
$this->name=$name;
} }
构造函数

1、什么是构造函数?
构造函数是类中的一个特殊函数,当我们使用new关键字实例化对象时,相当于调用了类的构造函数;

2、构造函数有什么作用?
实例化对象时,自动调用,用于给对象的属性赋初值;

3、构造函数的写法?
①构造函数名必须与类同名:
[public]function Person(){
$this->name=$name
}
②使用魔术方法

4、构造函数注意事项?
①第一种写法,构造函数名,必须与类同名!!!
②如果一个类没有手写构造函数,则系统默认会有一个空参构造,因此可以使用new Person();
如果我们写进了带参数的构造函数,则将不再有空参构造,也就是不能直接使用new Person();

Person后面的()中的参数列表,必须符合构造函数的要求!!(即为形参实参问题);
③如果两种构造函数同时存在,将使用魔术方法__construct。

5、析构函数:__destruct():
①析构函数在对象被销毁释放之前自动调用;
②析构函数不能带有任何参数;
③析构函数常用于对象使用完以后,释放资源,关闭资源等;

6、什么是魔术方法?
PHP中给我们提供了一系列__开头的函数,这些函数无需手动调用,会在合适的时机自动调用,这类函数称为魔术函数(方法);
例如:

function __construct(){}// 在类new一个对象时自动调用;
function __destruct(){}// 在对象被销毁时时自动调用;

因此,为避免重复,我们要求,除了魔术方法之外,自定义函数与方法不能__开头;

最后,一般对于功能比较复杂的类,我们会单独的写到一个类文件中。
类文件的命名,统一小写,使用"类名.class.php"的方式命名。
在其他文件中使用这个类时,使用include导入这个.class.php文件。

代码如下:

<?php
header ("Content-Type:text/html; charset=utf-8");
class Person{
var $name;
/*function Person($name){
$this->name=$name;
}*/
//魔术方法(此为官方推荐用法)
function __construct($name){
$this->name=$name;
}
public function say(){
echo "我叫".$this->name."!</br>";
}
function __destruct(){
echo "Ah! 张三 is die!";
}
}
include "person.class.php";
$zhangsan=new Person("zhangsan");
$zhangsan->say();

关于PHP面向对象编程的基础知识就就到这里,想学习更多的PHPOOP知识,欢迎关注我的技术博客,我们下期再见。觉得内容不错的小伙伴请点推荐,欢迎大家在评论下方评论区与博主互动,谢谢大家!

未完,待续。。。

更多精彩内容,敬请关注 Q的前端世界的技术博客,内容持续更新。

【PHP】PHP面向对象编程--phpOOP入门的更多相关文章

  1. PHP面向对象编程快速入门

    面向对象编程(OOP)是我们编程的一项基本技能,PHP4对OOP提供了良好的支持.如何使用OOP的思想来进行PHP的高级编程,对于提高PHP编程能力和规划好Web开发构架都是非常有意义的.下面我们就通 ...

  2. python笔记 面向对象编程从入门到高级

    目录: 一.概念 二.方法    2.1组合 2.2继承 2.3多态 2.4封装 2.5归一化设计 三.面向对象高级   3.1   反射(自省) 3.2   内置方法__getatter__, __ ...

  3. JQuery--JQuery面向对象编程快速入门-插件开发

    JQuery源码片段分析 (function(window){ /** * jQuery是一个函数 是一个对象 是一个构造器函数 */ var jQuery = function( selector, ...

  4. 快速学习JavaScript面向对象编程

    到处都是属性.方法,代码极其难懂,天哪,我的程序员,你究竟在做什么?仔细看看这篇指南,让我们一起写出优雅的面向对象的JavaScript代码吧! 作为一个开发者,能否写出优雅的代码对于你的职业生涯至关 ...

  5. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

  6. 《挑战30天C++入门极限》C++面向对象编程入门:构造函数与析构函数

        C++面向对象编程入门:构造函数与析构函数 请注意,这一节内容是c++的重点,要特别注意! 我们先说一下什么是构造函数. 上一个教程我们简单说了关于类的一些基本内容,对于类对象成员的初始化我们 ...

  7. 《挑战30天C++入门极限》C++面向对象编程入门:类(class)

        C++面向对象编程入门:类(class) 上两篇内容我们着重说了结构体相关知识的操作. 以后的内容我们将逐步完全以c++作为主体了,这也意味着我们的教程正式进入面向对象的编程了. 前面的教程我 ...

  8. [Java入门笔记] 面向对象编程基础(一):类和对象

    什么是面向对象编程? 我们先来看看几个概念: 面向过程程序设计 面向过程,是根据事情发展的步骤,按进行的顺序过程划分,面向过程其实是最为实际的一种思考方式,可以说面向过程是一种基础的方法,它考虑的是实 ...

  9. 类和对象:面向对象编程 - 零基础入门学习Python037

    类和对象:面向对象编程 让编程改变世界 Change the world by program 经过上节课的热身,相信大家对类和对象已经有了初步的认识,但似乎还是懵懵懂懂:好像面向对象编程很厉害,但不 ...

随机推荐

  1. CTF 和 PHP ,数据库

    引言 接触CTF 差不多一个月了,网上题目刷得也差不多,做了不少笔记,老想总结一下.当然,这种文章网上多得是. 正文笔记 少不了弱类型,松散比较,放一张图 2.  mysql_real_escape_ ...

  2. netty基础--基本收发

    使用maven构建一个基本的netty收发应用,作为其他应用的基础.客户端使用packet sender工具. 1  添加netty依赖 1  maven netty依赖 <dependency ...

  3. React模块化开发

    借助前端构建工具webpack 1.webpack是facebook为react量身打造的构建工具 2.主要作用是实现模块化,代码整合,代码分割的作用 3.使用webpack整合以后 也不需要使用br ...

  4. js实现谷歌坐标转百度坐标

    js实现谷歌坐标转百度坐标 谷歌坐标转百度坐标 实现算法如下(以js为例,其他语言调整就行): //$lat 维度:$lng 经度  function GCJTobaidu($lat, $lng){ ...

  5. source install sshpass in aix

    1.源码下载:   wget https://nchc.dl.sourceforge.net/project/sshpass/sshpass/1.06/sshpass-1.06.tar.gz 2.解压 ...

  6. Spring component-scan 的逻辑 、单例模式下多实例问题、事务失效

    原创内容,转发请保留:http://www.cnblogs.com/iceJava/p/6930118.html,谢谢 之前遇到该问题,今天查看了下 spring 4.x 的代码 一,先理解下 con ...

  7. 3分钟带你了解PowerShell发展历程——PowerShell各版本资料整理

    本文带你了解PowerShell发展历程,顺便整理了一点资料,方便大家查询. Windows PowerShell® 是基于任务的命令行管理程序和脚本语言,专为进行系统管理而设计. 在 .NET Fr ...

  8. poj2976(01分数规划)

    poj2976 题意 给出 a b 数组,一共 n 对数,其中最多可以去掉 k 对,问怎样使剩下比率(原始比率是 $ \frac{\sum_{i=1}^{n} a}{\sum_{i=1}^{n} b} ...

  9. 模板C++ 03图论算法 2最短路之全源最短路(Floyd)

    3.2最短路之全源最短路(Floyd) 这个算法用于求所有点对的最短距离.比调用n次SPFA的优点在于代码简单,时间复杂度为O(n^3).[无法计算含有负环的图] 依次扫描每一点(k),并以该点作为中 ...

  10. 论文笔记 Spatial contrasting for deep unsupervised learning

    在我们设计无监督学习模型时,应尽量做到 网络结构与有监督模型兼容 有效利用有监督模型的基本模块,如dropout.relu等 无监督学习的目标是为有监督模型提供初始化的参数,理想情况是"这些 ...