一、类的自动载入

//类的自动载入我们使用 spl_autoload_register($autoload_function )。我们需要在不同的地方包含更多不同的类文件,只需要多写几个 $autoload_function就可以了。
//例如:
spl_autoload_register('my_autoloader'); function my_autoloader($class) {
include 'classes/' . $class . '.class.php';
}

假如程序现在需要包含 Database.class.php, 当程序运行到 my_autoloadder ()时,发现Database.class.php类不存在,就会自动包含进来。

二、PSR-0规范

三、SPL库的使用 (Standard Php Library)

1、SPL常用数据结构。

SplStack (栈)

特点:只有一个出入口,跟试管儿一样,先进后出。

$stack = new SplStack();
$stack ->push('orange');
$stack ->push('banana'); $stack->rewind();
while($stack->valid()){ //对象的valid()方法检查是否到了结尾处。
var_dump($stack->current());
$stack->next();
}
//输出结果
string 'banana' (length=6)
string 'orange' (length=6)

SplQueue(队列)

特点:先进先出,后进后出

$queue = new SplQueue();
$queue->enqueue('A');
$queue->enqueue('B'); $queue->rewind();
while($queue->valid()){
echo $queue->current(),"\n";
$queue->next();
} //输出结果:
//A
//B
//注:
$queue->dequeue(); //用于删除最前面的一个数据。

SplHeap(j堆,又叫二叉堆)

特点:采用二叉树的方式存储数据。

分类:最大堆(大根堆)和最小堆(小根堆)

最大堆:根结点的键值是所有堆结点键值中最大者,且每个结点的值都比其孩子的值大。

最小堆:根结点的键值是所有堆结点键值中最小者,且每个结点的值都比其孩子的值小

下面以最小堆来进行说明

$h = new SplMinHeap();

// [parent, child]
$h->insert([9, 11]);
$h->insert([0, 1]);
$h->insert([1, 2]);
$h->insert([1, 3]);
$h->insert([1, 4]);
$h->insert([1, 5]);
$h->insert([3, 6]);
$h->insert([2, 7]);
$h->insert([3, 8]);
$h->insert([5, 9]);
$h->insert([9, 10]); for ($h->top(); $h->valid(); $h->next()) {
list($parentId, $myId) = $h->current();
echo "$myId ($parentId)\n";
} //输出结果
1 (0)
2 (1)
3 (1)
4 (1)
5 (1)
7 (2)
6 (3)
8 (3)
9 (5)
10 (9)
11 (9)

SplFixedArray (固定长度的数组)

// Initialize the array with a fixed length
$array = new SplFixedArray(5); $array[1] = 2;
$array[4] = "foo"; var_dump($array[0]); // NULL
var_dump($array[1]); // int(2)
var_dump($array["4"]); // string(3) "foo"

四、链式操作

链式操作最核心的一点就是要返回 $this

class DataBase
{
public function where($condition)
{
//....
return $this;
}
public function orderBy($order)
{
//....
return $this;
}
public function limit($limit)
{
//....
return $this;
}
}

操作方式:

$db = new DataBase()
$db->where()->orderBy()->limit();

例如下面这个是yii2上吗的where方法,return $this 是关键

全面解读php-面向对象的更多相关文章

  1. 深入解读JavaScript面向对象编程实践

    面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式,主要包括模块化.多态.和封装几种技术.对JavaScript而言,其核心是支持面向对象的,同时它也提供了强大灵活的基于原型的面向对象编程能力 ...

  2. js面向对象(构造函数与继承)

    深入解读JavaScript面向对象编程实践 Mar 9, 2016 面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式,主要包括模块化.多态.和封装几种技术. 对JavaScript而言,其 ...

  3. 《JS高程》对象&原型学习笔记

    ECMA-262 把对象定义为:”无序属性的集合,其属性可以包含基本值.对象或者函数.”可以把 ECMAScript 的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数.   6.1.理解 ...

  4. JavaScript之Function函数深入总结

    整理了JavaScript中函数Function的各种,感觉函数就是一大对象啊,各种知识点都能牵扯进来,不单单是 Function 这个本身原生的引用类型的各种用法,还包含执行环境,作用域,闭包,上下 ...

  5. 深入解读 Js 中的面向对象编程

    前言:今天看了一篇文章觉得很不错,所以给大家分享一下,也许很多人都看过面向对象编程甚至写过这样博客,觉得面向对象编程就那样,没啥好说的,那可能是因为你对这方面知识已经了解,可以选择性跳过.那如果有更通 ...

  6. 面向对象设计模式_生成器模式解读(Builder Pattern)

    首先提出一个很容易想到应用场景: 手机的生产过程:手机有非常多的子件(部件),成千上万,不同品牌的手机的生产过程都是复杂而有所区别的,相同品牌的手机在设计上也因客户需求多样化,大到型号,小到颜色,是否 ...

  7. Java使用实现面向对象编程:第七章集合框架的解读=>重中之重

    对于集合框架,是非常重要的知识,是程序员必须要知道的知识点. 但是我们为什么要引入集合框架呢? 我们之前用过数组存储数据,但是采用数组存储存在了很多的缺陷.而现在我们引用了集合框架,可以完全弥补了数组 ...

  8. 面向对象设计模式_命令模式(Command)解读

    在.Net框架中很多对象的方法中都会有Invoke方法,这种方法的设计实际是用了设计模式的命令模式, 模式图如下 其核心思路是将Client 向Receiver发送的命令行为进行抽象(ICommand ...

  9. 面向对象设计模式_享元模式(Flyweight Pattern)解读

    场景:程序需要不断创建大量相似的细粒度对象,会造成严重的内存负载.我们可以选择享元模式解决该问题. 享元抽象:Flyweight 描述享元的抽象结构.它包含内蕴和外蕴部分(别被术语迷惑,这是一种比较深 ...

  10. angular2系列教程(六)两种pipe:函数式编程与面向对象编程

    今天,我们要讲的是angualr2的pipe这个知识点. 例子

随机推荐

  1. vue中v-if和v-for优先级

    v-for和v-if不应该一起使用,必要情况下应该替换成computed属性.原因:v-for比v-if优先,如果每一次都需要遍历整个数组,将会影响速度,尤其是当之需要渲染很小一部分的时候.   错误 ...

  2. vue组件之事件

    自定义事件 通过prop属性,父组件可以向子组件传递数据,而子组件的自定义事件就是用来将内部的数据报告给父组件的. <div id="app3"> <my-com ...

  3. 使用Django的ORM详细操作

    1.自己动手创建数据库 create database 数据库名; 2.在Django项目中设置连接数据库的相关配置(告诉Django连接哪一个数据库) #在数据库相关的配置 DATABASES = ...

  4. 韦东山嵌入式Linux学习笔记03--如何搭建软件环境

    1. 从网上下一个虚拟机,比如vmvare station 2.下一个ubuntu镜像回来安装,  我下了14.04来安装.参考链接:  https://blog.csdn.net/qq1326702 ...

  5. Linux课程学习 第二课

    工欲善其事,必先利其器 虚拟机安装(链接中有详细的操作方法,这里就不再详细说明了,但有注意事项,会在下文中截图标注) https://www.linuxprobe.com/  注:为了避免是权限问题导 ...

  6. yum源遇到的问题

    1.在配置CentOS的本地yum源时,所遇到的问题,本地yum设置失败 步骤: vim /etc/yum.repos.d/local.repo  设置本地源  可能会遇到本地源问题,注意使用tab键 ...

  7. Spring中配置Hibernate事务管理

    <!-- transationManager --> <bean id="transactionManager" class="org.springfr ...

  8. 面试复习题(一)Java系列

    (根据自己的理解和根据黑马资料总结—意见不统一我会写上自己的理解) 一.Java面向对象 1.面向对象都有哪些特性以及你对这些特性的理解 继承.封装.多态.(抽象) 2.public,private, ...

  9. 牛客练习赛47 E DongDong数颜色 (树状数组维护区间元素种类数)

    链接:https://ac.nowcoder.com/acm/contest/904/E 来源:牛客网 DongDong数颜色 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 5242 ...

  10. Tableau 分群

    对数据的特征进行分析,分群. 数据选用的是Iris data 下载地址:http://archive.ics.uci.edu/ml/machine-learning-databases/iris/ 1 ...