跟随我在oracle学习php(49)

一些有关类和对象的系统函数和运算符

class_exists(), :判断某个类是否存在(定义过)

interface_exists(), :判断接口是否存在

get_class():获取某个对象的“所属类名”

get_parent_class(), :获取某个对象的“所属父类的类名”

get_class_methods(), :获取一个类的所有方法,返回一个索引数组,就是这些方法的名字。

get_class_vars(), :获取一个类的所有属性,返回一个数组,下标为属性名,值为属性值。

get_declared_classes():获得所有声明过的类(含系统中的类)

is_object():判断是否对象

get_object_vars():获得对象的所有属性,返回一个数组,下标为属性名,值为属性值

运算符:

new

instanceof: 判断一个对象是否是某个类的“实例”

注意一个现象:

两个特定语法场景的辨析:

对象向下传递特性;

当一个对象($o1) 调用一个实例方法,然后,在该实例方法(f1)中又去“静态”调用另一个类的方法(f2),则在方法f2中,会自动获得在方法f1中的那个$this对象。

对比:

可见f2方法直接调用会产生严重错误(因为找不到$this)

static后期静态绑定特性:

可见static3个不同含义的语法:

函数中的静态变量:

function  f1(){

static $v1 = 1;

}

类中的静态成员:

class A{

static  $v1 = 1;

static  function f1(){}

}

方法中的动态指代“当前类”:

class A{

function f1(){

static::f2();//static此时指代调用f1这个方法的类(或对象的类)

self::f2(); //self这里永远指代当前A这个类。

}

}

面向对象3大思想特征介绍:

封装:

就是把数据“封闭”起来,尽量不给别人看到。

面向对象的基本语法“类的定义”形式,可以认为是最基本封装——封装了很多数据到某个类(对象)。

但:

更严格(更常说)的封装,是尽量将属性做出“私有的”——并通过共有的方法来向外提供对该属性的“可控性操作”:

继承:

多态:

多态:看起来用的是相同的东西(方法),但会得到不同的结果。

通常是指:一个对象可以使用相同的方法(动作)但得到不同的结果:

(这里是其他常见面向对象语法示例:)

class A{

function  f1($x ){....做事情1;。。。。}

function  f1($x, $y ){....做事情2;。。。。}

function  f1($x, $y, $z ){....做事情3;。。。。}

}

也指:不同的对象使用相同的方法,但得到不同的结果:

目录操作

创建目录

Mkdir(目录地址,权限,是否递归创建=false);

删除目录

Rmdir(目录地址)

仅仅可以删除空目录。(不支持递归删除)

移动改名)

Rename(旧地址,新地址)

该函数也支持操作文件

获取目录内容(文件)

打开目录 目录句柄 = opendir(目录地址)

目录句柄:php程序与目录间的一个联系

依次读取目录内文件 文件名 = readdir(目录句柄);

依次读取一个文件(子目录),同时向下移动句柄指针。如果读取不到返回false

目录内存在两个逻辑子目录 ., .. 分别表示当前目录和上级目录!

通过配合 循环结构 完成目录内所有文件的读取:

处理 0 文件名

关闭目录 closedir()

递归获取目录内容

打开某个目录

依次读取目录内文件

如果某个文件为目录

递归对该目录采用打开,读取,判断这个递归草

递归点 如果子文件为目录,则递归

出口 如果目录中不存在子目录,则不需要继续递归!

树状展示

使用特定数量的缩进达到树状目的!

核心问题,计算需要缩进的数量!

缩进级别,与递归调用深度保持一致。每当执行递归操作找到的文件的缩进级别+1;

语法实现:

增加一个参数,表示当前函数调用的深度级别,每当递归+1;

嵌套

使用数组的嵌套,表示层级关系!

例如

实现

猜你喜欢

转载自www.cnblogs.com/RighTgraM/p/10925080.html