面向过程:
一堆变量。。。。
一些函数。。。。
流程控制。。。。
面向对象:
class 类{
一堆属性。。。。
一些方法。。。。
其中有:流程控制。。。。
}
MVC编程思想:
一堆类;
在代码运行到某个位置,需要一个类的时候,php系统内部可以做到“自动加载类文件”
new一个对象的时候,使用一个类的静态方法的时候
定义系统内部的特殊函数(魔术函数):__autoload()
function __autoload( $class_name )
{
//这里要根据$class_name去构建合适的文件路径并加载它
}
这个函数不应我们去手动调用。
而且,类的名字应该跟类文件的名字有一定的“关联”,并且推荐类文件有相对稳定的存储位置。
分2步:
1:定义要作为“自动加载”的函数名,可以多个;
spl_autoload_register(“函数名”);
2: 定义这些函数,跟定义__autoload()类似。
$o2 = clone $o1;
class Single{
private funciton __construct(){}
private static $instance = null;
private fucntion __clone(){};
static function GetInstance ( ... ){
if( !(static::$instance instanceOf static) ){//还没有
static::$instance = new self ( ... );
}
return static::$instance;
}
}
foreach( $ob1 as $key => $vlaue){...}
PHP内置标准类: stdClass
std: standard(标准的)
数组--->对象: 下标变为属性名,对应值就是属性值;——注意:数字下标的元素,并不合适
null--->对象:空的标准类对象;
其他标量类型(float,int, string,bool)--->对象:是标准类的对象,属性名为scalar。
就是要求某个变量只能存储(接收)某种类型的数据;
局部:只是在函数或方法的形参上,支持约束;
部分类型:array, 对象的所属类, 对象所实现的接口; function(函数,这是php5.4之后才可以)
序列化:就是将内存数据,存储到硬盘的过程;
反序列化:将存储到硬盘的序列化数据,恢复为内存数据;
该方法在一个对象序列化的时候,会自动调用(前提是有);
此时,在该方法中,就给我们一个“机会”:可以自己选项需要进行序列的属性;
此时,在该方法中,就给我们一个“机会”:可以在对象“醒过来”的时候,去完成一些此刻需要做的事情;
将一个对象当做一个字符串来使用的时候,会自动调用,此时该方法应该返回一个字符串。
将一个对象当做一个函数来调用的时候,会自动调用
与类有关的魔术常量:__CLASS__, __METHOD__
与类有关的系统函数:class_exists() interface_exists(), get_class(), get_class_vars(), ....
与对象有关的系统函数:get_object_vars()
与类有关的运算符:new instanceOf;
一个类的对象,自然是这个类的一个实例;
而且:它必然也是这个类的上级类的实例!
1:用在函数(或方法中),用来定义一个局部的“静态变量”;
2:用在一个类的属性或方法的定义中,表示“静态”属性或方法;
3,:用在一个方法的内部,并使用“::”语法,表示调用本方法的“当前类”;
对比:self:用在一个方法的内部,并使用“::”语法,表示当前self代码位置所述的类;
可以简单理解为:类就是一个“语法上的封装”:将一些属性和方法封装起来,变成“我的”;
这是广义的封装;但通常所说的封装,比这个更“严格”:
将一个类中的属性或方法“尽可能地”少对外开放其使用权限;
就是语法上的常见情形;
继承是设计类的时候的代码重用的最重要的机制;
就是多种表现形态;
1,不同的对象,使用相同的方法,可能会得到不同的结果;
2,同一个对象,使用相同的方法,也可能会得得到不同的结果