自己总结的面向对象

继承]
如果两个类中有重复的成员,则一个类可以继承另外一个类,以减少代码的重复,
语法格式
class 子类名  extends  父类名{ 代码段 }
子父类的访问权限
在本类中,3p修饰符修饰的成员都能访问,
在子类中,可以访问父类的公有和受保护的成员,
在类外,只能访问公有成员,其他成员不能直接访问
--------------------------------------------
重写:子类中定义了一个和父类重名的方法,就是重写,
在子类中调用本类中的同名方法时,会自动覆盖掉父类中的同名方法,如果要使用父类当中同名的方法,(已经重写过了)要使用关键字Pareat::加重写的方法名;
--------------------------------------------
一个子类不能继承多个父类,一个父类可以有多个子类,如果一个类想继承多个,可以采用链式继承,注意单继承,多实现.
面向对象
抽象
面向对象的核心就是让对象帮我们实现制定的功能
对象是具体的,是特殊的.
类是具有相同功能和特征事物的,是抽象的.
类的实体化就是对象,对象的抽象就是类,类是共性,对象是个性.
类的声明格式
class 类名{
常量;


成员属性;


成员方法;
}
--------------------------------------------
类名是不区分大小写的,最好是驼峰式命名,为了规范,要严格区分大小写.
类中有成员属性和成员方法组成.
-------------------------------------------------------------------
成员属性声明要注意的项
1.必须加上成员修饰符,public公共的,protected,受保护的,private私有的
2.成员属性赋值时不能使用变量和调用函数赋初始值.
3不要使用计算给成员属性赋值,注意老版本中赋值会报错,新版本中,不会.
4.成员属性可以不要初始值,可以用常量来赋初始值.
---------------------------------------------
成员方法声明要注意的项
1.必须加上成员修饰符,public公共的,protected受保护的,private私有的
2.成员方法不写返回值时,则返回值时null,
3成员方法的代码体是可有可无的,
4成员方法的参数列表是可有可无的,和代码体一样是按需添加的,用到就添,
---------------------------------------------
类内有成员属性,成员方法,常量,三种,写其他的会报错.
类中成员属性和成员方法的位置是不固定的,用到哪个,系统会自己去找,
抽象abstract
abstract可以修饰类也可以修饰方法,被修饰的类,不能被实例化,被修饰的方法不能有代码体,一般一个类被abstract进行修饰,则说明他的内部可能有未完成的成员方法,一个类如果被abstract修饰,他的内部可能没有抽象方法,但是一个类中如果有抽象方法,则他所在的类一定是抽象类,抽象类中的抽象方法需要由抽象类的子类去实现,如果子类不能实现其中的方法,就让他孙子类去实现.
abstract public function attack();抽象类的语法格式
abstract 修饰符  function  方法名();---->抽象方法的声明
---------------------------------------------------------
接口interface
语法格式----->interface  接口名{    代码体;   }
注意接口内的方法都是抽象方法,接口内只有抽象方法和常量
接口需要由一个类去实现,class  类名  implement  接口名{   代码体;  }注意如果接口的实现类不能实现接口中的所有抽象方法,则需要在类名之前加上abstract,如果想继续实现接口中的抽象方法,让一个类去继承这个抽象类.


接口的实现类都是抽象类,如果全部实现了接口中的方法,则不需要加上abstract,
如果没有完全实现,就要用abstract修饰类名.且没有实现的抽象方法要用abstract修饰


---------------------------------------------------------
抽象方法和接口的区别
接口内的方法都是抽象方法,接口中只有抽象方法和常量,接口中的方法都没有代码体,但是不用abstract修饰,
接口的实现类都是抽象类,
抽象类中的方法可以说是抽象方法,也可没有抽象方法
--------------------------------------------------------
$变量名=new 类名(参数的有无看构造方法了);---->这是对象的实例化
注意,类名后的小括号是可有可无的,建议写,
报错行在类内的某一行,不一定真的就是那一行错了;原因是他不再是之前的过程化的代码了,所以以后的找错会困难一些,但是错误还是遵循逻辑的,跟着逻辑走就不会有错.
---------------------------------------------
对象的实力化可以放到类前也可以放到类后.
---------------------------------------------
给成员属性赋值 对象->属性名(注意无$符)=属性值;
访问成员属性 对象->属性名;
访问成员方法 对象->方法名(参数列表);


注意:成员属性在类的外部也可以进行添加,----->对象->属性名=属性值,例如:一个person类中,有name和age属性,要在类外添加一个sex属性,代码如下
,不写了貌似没人会这么用
--------------------------------------------
unset(对象->成员属性);------>删除一个成员属性
->是成员访问符
--------------------------------------------
$this表示当前对象,是当前对象的引用,为什么会出现这个$this呢,原因是
一个类可以实例化多个对象,当我们打印一个对象的名的时候,
会出现Object(对象名)[数字]--->他表示的是当前对象是,本类实例化的第几个对象,具体第几个可以看方括号内的数字
注意$this只能用在成员方法中使用,类内只有成员属性和成员方法,还有常量,在类外访问一些属相和方法的时候,就要用类名了.
封装
定义:
使用成员修饰符修饰,能够最大限度的隐藏内部实现细节,以保证对象的安全,对外提供公共的访问接口
继承]
如果两个类中有重复的成员,则一个类可以继承另外一个类,以减少代码的重复,
语法格式
class 子类名  extends  父类名{ 代码段 }
子父类的访问权限
在本类中,3p修饰符修饰的成员都能访问,
在子类中,可以访问父类的公有和受保护的成员,
在类外,只能访问公有成员,其他成员不能直接访问
--------------------------------------------
重写:子类中定义了一个和父类重名的方法,就是重写,
在子类中调用本类中的同名方法时,会自动覆盖掉父类中的同名方法,如果要使用父类当中同名的方法,(已经重写过了)要使用关键字Pareat::加重写的方法名;
--------------------------------------------
一个子类不能继承多个父类,一个父类可以有多个子类,如果一个类想继承多个,可以采用链式继承,注意单继承,多实现.
多态
通俗的说是:对象的多种状态
定义:父类引用指向子类对象
杂项
总结的文字
---------------------------------------------
实例化对象---->调用构造方法---->执行访问成员属性或成员方法---->执行析构方法.
---------------------------------------------
面向对象的四大特征是封装,继承,多态,抽象
--------------------------------------------
计算机内存四部分
1.堆区.
2.栈
3.静态区
4.代码区
对象是存在堆中,栈中存的只是对象的引用,存的是堆中的内存地址值,方法,函数,流程控制存在代码区,全局变量,常量,静态变量存在静态区,这里存的东西的特点是,只初始化一次,不会随着堆和栈释放而消失,一个类中再多的对象,也只有一个共同的静态属性,静态调用在类内是self::,在类外是类名::,
--------------------------------------------
单例设计模式,产生的对象有且只有一个,不用new,静态变量,构造方法私有化,公有的建对象的静态方法,并判断对象是否已经存在.
<?php 
//单例模式
class Obj{
//定义静态成员属性
public static $o = null;


//构造方法私有化
private function __construct(){


}


//在类的内部去实例化本对象
public static function getObj(){
if(self::$o==null){
self::$o = new Obj();
}
return self::$o;
}


}


$a = Obj::getObj();
?>
--------------------------------------------
成员修饰符可以修饰属性和方法,修饰符代表的是一个权限的问题1.public 2,protected 3private
总结,public修饰的成员可以在类内和类外都可以访问到,
protected修饰 的成员可以在类内和子类中能访问到,
private修饰的成员只能在类内进行访问,
--------------------------------------------
成员属性可以在类的外部进行添加,具体的方法是实例化对象-->新的属性=值,成员属性的值是可以修改的,实例化的对象名-->成员属性名=值;
define可以用于流程控制,可以接收变量的值,把变量放到值的位置,difine不能在类内定义常量.
const用在类的内部,定义常量和数组,
const定义这是一个用来定义常量的关键字,语法---->const  常量名=常量值;
在类的内部访问常量,--->self::常量名;
在类外访问常量----->类名::常量名;
--------------------------------------------
clone的对象都存在堆中,两个进行比较的时候是TRUE,三个比较的时候是false,原因是地址值不同.
--------------------------------------------
final关键字:最终的,
final修饰的类不能 被继承,final修饰的方法不能被重写,
--------------------------------------------
static关键字:静态的,一个修饰符,修饰成员属性和成员方法,注意static和3P修饰符是配合使用的,如 public static $name;定义一个公有的静态的名字的属性.作用是使用静态修饰的成员属性变成了公有的存在的属性.
访问静态属性,在类的内部是    self::属性名; 在类的外部是类名::属性名;
static修饰成员方法, public static function sing(){},注意,被static修饰的成员方法只能操作静态成员属性和静态成员方法,也就是说静态成员方法中不能有this,静态的可以访问静态的,(在同一个类中)
静态成员方法的访问和静态成员的属性的访问是一样的.
--------------------------------------------
instance of  关键字,用于判断一个对象是否是属于该类或父类.
语法--->对象  instance  of  类名;他是一个运算符,返回值为TRUE或false;true代表属于,false代表不属于
--------------------------------------------
clone 关键字  克隆,作用是将一个对象克隆出一份
语法---->$a  clone  $b;作用是初始化当前对象创建出的对象信息
魔术方法12种
1.构造方法__construct(参数列表不定,具体个数由自己定义)
调用的场景:初始化对象的时候自动调用该方法
作用:一般在其内写一些初始化的加载项
构造方法就是方法名与类名相同的成员方法,如果你想写成和类名相同的.也没有关系
--------------------------------------------
2.析构方法__destruct(无任何参数)
调用的场景:1对象赋空,2对象销毁,3脚本执行完毕
作用:一般这个方法是不写的,因为PHP在结束脚本的时候会自动将一些数据销毁,原则上就是其他的程序执行完了,他做一个收尾断后的工作,比如,清空一些数据,释放资源,关闭等,用的时候再说吧
--------------------------------------------
3__get(一个)方法:当我们访问一个不存在的成员属性的时候,或者非公有的成员属性的时候哦 会自动调用此方法,会将访问的成员属性传到get方法的内部,名字会传到参数中.
-------------------------------------------
4__unset(一个)销毁一个非公有的成员属性时会自动调用此方法,无返回结果,会将销毁的成员属性传递到unset方法的内部,成员属性名传到参数位置.
-------------------------------------------
5__set($name,$value) 设置一个非公有属性的值调用这个方法,另个参数,一个是属性,第二个是属性的值,
-------------------------------------------
6__isset($name)判断一个非公有的属性或者不存在的属性,会自动调用,参数是被判断的属性名,


7.____call($function,$canshuliebiao)当调用一个非公有方法时.会自动调用这个方法,注意参数1是方法的名字,参数2是方法的参数列表,参数2是一般是一个数组,要传参数,要把数组变成字符串,显示在小括号内,刚好是各个参数用逗号分隔的字符串,核心代码-->$canshuliebiao=implode(',', $canshuliebiao);
-------------------------------------------
8.__clone(无参数),当我们对一个对象克隆的时候自动调用这个方法,在这个方法中我们可以在方法体中为刚克隆的对象赋属性值,例如
public function __clone(){
$this->name = 'Mandy';
$this->age = 15;
}
---------------------------------------------
9.__autoload(一个参数),在实例化或继承一个不存在的类时,自动调用,参数是调用不存在的类名.一般这个魔术函数用作文件的自动加载,即我们要调用一个类中的一个方法,但是还没有require,我们可以在他的方法体中写自动引入的函数,例如
function __autoload($name){
if(file_exists('./Libs/'.$name.'.class.php')){
include './Libs/'.$name.'.class.php';
}elseif(file_exists('./Class/'.$name.'.class.php')){
include './Class/'.$name.'.class.php';
}
}
----------------------------------------------------------------


//将魔术函数__autoload进行重命名
spl_autoload_register('autoload');
----------------------------------------------------------------
10__tostring(无参数)使用echo对对象进行输出时,会自动调用
注意返回值必须是字符串,代替对象进行字符串输出


序列化与反序列化
serialize(数组或者对象);功能是将一个数组或者对象转为字符串,,运用一般可以把转化好的字符串保存到一个文件中,用到数据的时候再用反序列化将对象或者数组还原,注意传值的时候get和post都不能传对象,但是get可以传字符串,可以用这个完成对象的传递.
注意,一个对象或者数组转为一个字符串,这个字符串是有规律的,具体有什么规律,可以上网查,或者看笔记,
---------------------------------------------------------
unserialize(字符串);反序列化,功能是将一个字符串还原为一个对象或者是数组,
---------------------------------------------------------
11.__sleep(无参数)自动执行场景:当我们对一个对象进行串行化的时候,会自动调用
作用:可以方便我们对串行化数据的一个筛选
iii.注意:该方法返回的必须是一个数组,return一个数组.


---------------------------------------------------------
12.____wakeup(无参数)i.自动执行场景:当我们对一个对象进行反串行化的时候,会自动调用
可以方便我们修改对象的成员属性的内容,在这个方法总共我们可以改对象的属性的值
第五天的有点杂,算是杂项吧
一、类型约束:
a)约束函数可传入的参数类型
b)只能约束两种数据类型:数组和对象
---------------------------------------------
就是在函数中的参数列表中,形参的前面加上加上一个数据类型的名字,以表示对传入参数的限制,注意如果参数列表中传入的不是一个数组,那么一定是一个类的对象,类有系统类,有自定义的类,注意在新版的PHP7中,四种标量都可以是类型约束,用的时候注意版本
二、类的遍历
a)Foreach
b)可以将类当中的所有成员属性遍历出来
----------------------------------------
注意遍历的是类中的公有属性
Function_exists() 判断一个函数是否存在
----------------------------------------
----------------------------------------
__FILE__ 获取当前文件的绝对路径
__LINE__ 获取当前代码所在的行号
__FUNCTION__ 获取当前函数的名称
__METHOD__ 获取当前方法的名称
__CLASS__ 获取当前文件的名称
----------------------------------------
Class_exists() 判断一个类是否存在
Property_exists() 检测类当中的某一个属性是否被设置
Method_exists() 检测类当中的某一个方法是否被设置
Get_object_vars() 获取对象当中的属性列表
iv.Get_class_vars() 获取类当中的属性列表
Get_class_methods() 获取类当中的方法列表
vi.Get_class(); 获取对象实例化的类名






委派
SPL_autoload_register(新的函数名);
作用是给魔术函数__autoload改名,然后我们就能在类中任何位置写函数名为新的函数名的函数,更加的灵活


set_exception_handle(新的函数名);执行顺序是throw -->委派-->进入自定义新的函数名中,目的是不把代码写在catch中,直接跳到新的函数名所定义的函数中执行.
异常Exception
在我们写的代码中,其中的一段可能会报错,一旦报错就会影响整个程序的执行,这时我们就可以自己抛一个异常,让程序继续执行
格式:try{
可能出现错误的代码段,用大括号括起来,
throw new Exception(参数1是错误信息自定义的,参数2一个数字表示错误号);
}catch(Exception $e){
如果出现了错误要执行的代码写在这里;
}
当被大括号包住的代码出现了问题,就会new一个exception对象,注意一定要加上throw,然后调到catch大括号的里继续执行代码,


常用的错误信息的函数,拿到了这些错误信息,我们可以修改程序,使其不报错
$e->getMessage(); 获取错误信息
$e->getCode(); 获取错误编码
$e->getFile(); 获取报错文件的绝对路径
$e->getLine(); 获取报错行所在的行号


封装
定义:
使用成员修饰符修饰,能够最大限度的隐藏内部实现细节,以保证对象的安全,对外提供公共的访问接口
多态
通俗的说是:对象的多种状态
定义:父类引用指向子类对象
杂项
总结的文字
---------------------------------------------
实例化对象---->调用构造方法---->执行访问成员属性或成员方法---->执行析构方法.
---------------------------------------------
面向对象的四大特征是封装,继承,多态,抽象
--------------------------------------------
计算机内存四部分
1.堆区.
2.栈
3.静态区
4.代码区
对象是存在堆中,栈中存的只是对象的引用,存的是堆中的内存地址值,方法,函数,流程控制存在代码区,全局变量,常量,静态变量存在静态区,这里存的东西的特点是,只初始化一次,不会随着堆和栈释放而消失,一个类中再多的对象,也只有一个共同的静态属性,静态调用在类内是self::,在类外是类名::,
--------------------------------------------
单例设计模式,产生的对象有且只有一个,不用new,静态变量,构造方法私有化,公有的建对象的静态方法,并判断对象是否已经存在.
<?php 
//单例模式
class Obj{
//定义静态成员属性
public static $o = null;


//构造方法私有化
private function __construct(){


}


//在类的内部去实例化本对象
public static function getObj(){
if(self::$o==null){
self::$o = new Obj();
}
return self::$o;
}


}


$a = Obj::getObj();
?>
--------------------------------------------
成员修饰符可以修饰属性和方法,修饰符代表的是一个权限的问题1.public 2,protected 3private
总结,public修饰的成员可以在类内和类外都可以访问到,
protected修饰 的成员可以在类内和子类中能访问到,
private修饰的成员只能在类内进行访问,
--------------------------------------------
成员属性可以在类的外部进行添加,具体的方法是实例化对象-->新的属性=值,成员属性的值是可以修改的,实例化的对象名-->成员属性名=值;
define可以用于流程控制,可以接收变量的值,把变量放到值的位置,difine不能在类内定义常量.
const用在类的内部,定义常量和数组,
const定义这是一个用来定义常量的关键字,语法---->const  常量名=常量值;
在类的内部访问常量,--->self::常量名;
在类外访问常量----->类名::常量名;
--------------------------------------------
clone的对象都存在堆中,两个进行比较的时候是TRUE,三个比较的时候是false,原因是地址值不同.
--------------------------------------------
final关键字:最终的,
final修饰的类不能 被继承,final修饰的方法不能被重写,
--------------------------------------------
static关键字:静态的,一个修饰符,修饰成员属性和成员方法,注意static和3P修饰符是配合使用的,如 public static $name;定义一个公有的静态的名字的属性.作用是使用静态修饰的成员属性变成了公有的存在的属性.
访问静态属性,在类的内部是    self::属性名; 在类的外部是类名::属性名;
static修饰成员方法, public static function sing(){},注意,被static修饰的成员方法只能操作静态成员属性和静态成员方法,也就是说静态成员方法中不能有this,静态的可以访问静态的,(在同一个类中)
静态成员方法的访问和静态成员的属性的访问是一样的.
--------------------------------------------
instance of  关键字,用于判断一个对象是否是属于该类或父类.
语法--->对象  instance  of  类名;他是一个运算符,返回值为TRUE或false;true代表属于,false代表不属于
--------------------------------------------
clone 关键字  克隆,作用是将一个对象克隆出一份
语法---->$a  clone  $b;作用是初始化当前对象创建出的对象信息
魔术方法12种
1.构造方法__construct(参数列表不定,具体个数由自己定义)
调用的场景:初始化对象的时候自动调用该方法
作用:一般在其内写一些初始化的加载项
构造方法就是方法名与类名相同的成员方法,如果你想写成和类名相同的.也没有关系
--------------------------------------------
2.析构方法__destruct(无任何参数)
调用的场景:1对象赋空,2对象销毁,3脚本执行完毕
作用:一般这个方法是不写的,因为PHP在结束脚本的时候会自动将一些数据销毁,原则上就是其他的程序执行完了,他做一个收尾断后的工作,比如,清空一些数据,释放资源,关闭等,用的时候再说吧
--------------------------------------------
3__get(一个)方法:当我们访问一个不存在的成员属性的时候,或者非公有的成员属性的时候哦 会自动调用此方法,会将访问的成员属性传到get方法的内部,名字会传到参数中.
-------------------------------------------
4__unset(一个)销毁一个非公有的成员属性时会自动调用此方法,无返回结果,会将销毁的成员属性传递到unset方法的内部,成员属性名传到参数位置.
-------------------------------------------
5__set($name,$value) 设置一个非公有属性的值调用这个方法,另个参数,一个是属性,第二个是属性的值,
-------------------------------------------
6__isset($name)判断一个非公有的属性或者不存在的属性,会自动调用,参数是被判断的属性名,


7.____call($function,$canshuliebiao)当调用一个非公有方法时.会自动调用这个方法,注意参数1是方法的名字,参数2是方法的参数列表,参数2是一般是一个数组,要传参数,要把数组变成字符串,显示在小括号内,刚好是各个参数用逗号分隔的字符串,核心代码-->$canshuliebiao=implode(',', $canshuliebiao);
-------------------------------------------
8.__clone(无参数),当我们对一个对象克隆的时候自动调用这个方法,在这个方法中我们可以在方法体中为刚克隆的对象赋属性值,例如
public function __clone(){
$this->name = 'Mandy';
$this->age = 15;
}
---------------------------------------------
9.__autoload(一个参数),在实例化或继承一个不存在的类时,自动调用,参数是调用不存在的类名.一般这个魔术函数用作文件的自动加载,即我们要调用一个类中的一个方法,但是还没有require,我们可以在他的方法体中写自动引入的函数,例如
function __autoload($name){
if(file_exists('./Libs/'.$name.'.class.php')){
include './Libs/'.$name.'.class.php';
}elseif(file_exists('./Class/'.$name.'.class.php')){
include './Class/'.$name.'.class.php';
}
}
----------------------------------------------------------------


//将魔术函数__autoload进行重命名
spl_autoload_register('autoload');
----------------------------------------------------------------
10__tostring(无参数)使用echo对对象进行输出时,会自动调用
注意返回值必须是字符串,代替对象进行字符串输出


序列化与反序列化
serialize(数组或者对象);功能是将一个数组或者对象转为字符串,,运用一般可以把转化好的字符串保存到一个文件中,用到数据的时候再用反序列化将对象或者数组还原,注意传值的时候get和post都不能传对象,但是get可以传字符串,可以用这个完成对象的传递.
注意,一个对象或者数组转为一个字符串,这个字符串是有规律的,具体有什么规律,可以上网查,或者看笔记,
---------------------------------------------------------
unserialize(字符串);反序列化,功能是将一个字符串还原为一个对象或者是数组,
---------------------------------------------------------
11.__sleep(无参数)自动执行场景:当我们对一个对象进行串行化的时候,会自动调用
作用:可以方便我们对串行化数据的一个筛选
iii.注意:该方法返回的必须是一个数组,return一个数组.


---------------------------------------------------------
12.____wakeup(无参数)i.自动执行场景:当我们对一个对象进行反串行化的时候,会自动调用
可以方便我们修改对象的成员属性的内容,在这个方法总共我们可以改对象的属性的值
抽象
面向对象的核心就是让对象帮我们实现制定的功能
对象是具体的,是特殊的.
类是具有相同功能和特征事物的,是抽象的.
类的实体化就是对象,对象的抽象就是类,类是共性,对象是个性.
类的声明格式
class 类名{
常量;


成员属性;


成员方法;
}
--------------------------------------------
类名是不区分大小写的,最好是驼峰式命名,为了规范,要严格区分大小写.
类中有成员属性和成员方法组成.
-------------------------------------------------------------------
成员属性声明要注意的项
1.必须加上成员修饰符,public公共的,protected,受保护的,private私有的
2.成员属性赋值时不能使用变量和调用函数赋初始值.
3不要使用计算给成员属性赋值,注意老版本中赋值会报错,新版本中,不会.
4.成员属性可以不要初始值,可以用常量来赋初始值.
---------------------------------------------
成员方法声明要注意的项
1.必须加上成员修饰符,public公共的,protected受保护的,private私有的
2.成员方法不写返回值时,则返回值时null,
3成员方法的代码体是可有可无的,
4成员方法的参数列表是可有可无的,和代码体一样是按需添加的,用到就添,
---------------------------------------------
类内有成员属性,成员方法,常量,三种,写其他的会报错.
类中成员属性和成员方法的位置是不固定的,用到哪个,系统会自己去找,
抽象abstract
abstract可以修饰类也可以修饰方法,被修饰的类,不能被实例化,被修饰的方法不能有代码体,一般一个类被abstract进行修饰,则说明他的内部可能有未完成的成员方法,一个类如果被abstract修饰,他的内部可能没有抽象方法,但是一个类中如果有抽象方法,则他所在的类一定是抽象类,抽象类中的抽象方法需要由抽象类的子类去实现,如果子类不能实现其中的方法,就让他孙子类去实现.
abstract public function attack();抽象类的语法格式
abstract 修饰符  function  方法名();---->抽象方法的声明
---------------------------------------------------------
接口interface
语法格式----->interface  接口名{    代码体;   }
注意接口内的方法都是抽象方法,接口内只有抽象方法和常量
接口需要由一个类去实现,class  类名  implement  接口名{   代码体;  }注意如果接口的实现类不能实现接口中的所有抽象方法,则需要在类名之前加上abstract,如果想继续实现接口中的抽象方法,让一个类去继承这个抽象类.


接口的实现类都是抽象类,如果全部实现了接口中的方法,则不需要加上abstract,
如果没有完全实现,就要用abstract修饰类名.且没有实现的抽象方法要用abstract修饰


---------------------------------------------------------
抽象方法和接口的区别
接口内的方法都是抽象方法,接口中只有抽象方法和常量,接口中的方法都没有代码体,但是不用abstract修饰,
接口的实现类都是抽象类,
抽象类中的方法可以说是抽象方法,也可没有抽象方法
--------------------------------------------------------
$变量名=new 类名(参数的有无看构造方法了);---->这是对象的实例化
注意,类名后的小括号是可有可无的,建议写,
报错行在类内的某一行,不一定真的就是那一行错了;原因是他不再是之前的过程化的代码了,所以以后的找错会困难一些,但是错误还是遵循逻辑的,跟着逻辑走就不会有错.
---------------------------------------------
对象的实力化可以放到类前也可以放到类后.
---------------------------------------------
给成员属性赋值 对象->属性名(注意无$符)=属性值;
访问成员属性 对象->属性名;
访问成员方法 对象->方法名(参数列表);


注意:成员属性在类的外部也可以进行添加,----->对象->属性名=属性值,例如:一个person类中,有name和age属性,要在类外添加一个sex属性,代码如下
,不写了貌似没人会这么用
--------------------------------------------
unset(对象->成员属性);------>删除一个成员属性
->是成员访问符
--------------------------------------------
$this表示当前对象,是当前对象的引用,为什么会出现这个$this呢,原因是
一个类可以实例化多个对象,当我们打印一个对象的名的时候,
会出现Object(对象名)[数字]--->他表示的是当前对象是,本类实例化的第几个对象,具体第几个可以看方括号内的数字
注意$this只能用在成员方法中使用,类内只有成员属性和成员方法,还有常量,在类外访问一些属相和方法的时候,就要用类名了.
第五天的有点杂,算是杂项吧
一、类型约束:
a)约束函数可传入的参数类型
b)只能约束两种数据类型:数组和对象
---------------------------------------------
就是在函数中的参数列表中,形参的前面加上加上一个数据类型的名字,以表示对传入参数的限制,注意如果参数列表中传入的不是一个数组,那么一定是一个类的对象,类有系统类,有自定义的类,注意在新版的PHP7中,四种标量都可以是类型约束,用的时候注意版本
二、类的遍历
a)Foreach
b)可以将类当中的所有成员属性遍历出来
----------------------------------------
注意遍历的是类中的公有属性
Function_exists() 判断一个函数是否存在
----------------------------------------
----------------------------------------
__FILE__ 获取当前文件的绝对路径
__LINE__ 获取当前代码所在的行号
__FUNCTION__ 获取当前函数的名称
__METHOD__ 获取当前方法的名称
__CLASS__ 获取当前文件的名称
----------------------------------------
Class_exists() 判断一个类是否存在
Property_exists() 检测类当中的某一个属性是否被设置
Method_exists() 检测类当中的某一个方法是否被设置
Get_object_vars() 获取对象当中的属性列表
iv.Get_class_vars() 获取类当中的属性列表
Get_class_methods() 获取类当中的方法列表
vi.Get_class(); 获取对象实例化的类名






委派
SPL_autoload_register(新的函数名);
作用是给魔术函数__autoload改名,然后我们就能在类中任何位置写函数名为新的函数名的函数,更加的灵活


set_exception_handle(新的函数名);执行顺序是throw -->委派-->进入自定义新的函数名中,目的是不把代码写在catch中,直接跳到新的函数名所定义的函数中执行.
异常Exception
在我们写的代码中,其中的一段可能会报错,一旦报错就会影响整个程序的执行,这时我们就可以自己抛一个异常,让程序继续执行
格式:try{
可能出现错误的代码段,用大括号括起来,
throw new Exception(参数1是错误信息自定义的,参数2一个数字表示错误号);
}catch(Exception $e){
如果出现了错误要执行的代码写在这里;
}
当被大括号包住的代码出现了问题,就会new一个exception对象,注意一定要加上throw,然后调到catch大括号的里继续执行代码,


常用的错误信息的函数,拿到了这些错误信息,我们可以修改程序,使其不报错
$e->getMessage(); 获取错误信息
$e->getCode(); 获取错误编码
$e->getFile(); 获取报错文件的绝对路径
$e->getLine(); 获取报错行所在的行号
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值