本文共 3572 字,大约阅读时间需要 11 分钟。
虽然平时都在用面向对象的思维编程。但是都是基于框架,很多技术细节一段时间不用就会逐渐模糊。
";
print_r($newobj);
echo "
";
echo '
';
if($p === $newobj){
echo 'Y';
}else{
echo 'N';
}
/*
class new public protected private static final const instanceof
self parent clone $this extends
#####################################################################
class
[修饰符] class 类名{
[成员属性]
可以有默认值
默认值不能是变量
默认值不能有表达式
默认值可以是常量
[成员方法]
与以往的函数一致
除了以上两种不能再出现其他内容
}
new
实例化对象 每次new都会得到一个新的对象
封装
public protected private
自己 Y Y Y
有一腿 Y Y N
外部 Y N N
static
可以修饰属性和方法 不能修饰类
被修饰的属性和方法需要使用范围操作符来访问
静态方法里面不能出现非静态的内容($this)
final
可以修饰类和方法 不能修饰属性
被修饰的类不允许被继承(最终版本)
被修饰的方法不能被重写(最终版本的方法)
const
可以在类里面定义常量
值不能出现表达式
也可以用于在类外面定义常量(PHP版本 5.3+)
define
不能在类里面定义常量
值可以有表达式
instanceof 二元运算符
if($a instanceof A) 判断$a 是不是 A类的实例 如果类是对象的祖宗也是可以的
$this
伪变量(在方法里面访问自己的方法或属性)
代表的是对象 表示的是自己
----------
以下两个都表示的是类
self
表示的是自己这个类
parent
表示的是父类
->
成员访问符 前面是对象 后面数对象的成员(属性和方法)
$this->name $a->name $a->say()
::
范围操作符 前面是类 后面是静态属性静态方法以及常量
A::$name A::HOST self::$name parent::__construct()
clone
用于克隆一个对象 会得到一个新对象
得到新对象的方式
new
unserialize
clone
=
用于取别名
==
如果两个对象是同一个类的实例 并且所有的属性及值都相等 则相等
===
用于判断是否是同一个对象
extends 用于继承
继承特性
PHP只支持单继承(只能有一个爹)
PHP支持被多个继承(一个爹可以有多个儿子)
PHP支持多层继承(祖宗关系) A继承B B继承C 那么A里面就有 A B C 里面所有内容
属性的继承(重写 重构 重载)
子类中出现与父类中同名属性则覆盖 如果子类中只定义不赋值 那么值为NULL
权限只能扩大不能缩小(大小指的是有效范围)
父类 子类
public public
protected protected public
private private protected public
方法的继承
子类中的同名方法会覆盖父类中的方法
参数个数应该和父类中保持一致
参数是否有默认值也应该保持一致
参数的默认值是什么 可以随意
权限范围只能扩大不能缩小
##########################################################################
__construct() 在使用new关键字的时候会自动调用 用于初始化
__destruct() 在对象销毁的时候自动调用 用于回收资源
__get($key) 在本没有权限访问的地方访问属性
__set($key,$val) 在本没有权限对属性赋值的时候
__isset($key) 在本没有权限使用isset函数判断属性的时候
__unset($key) 在本没有权限使用unset函数销毁属性的时候
__call($name,$list) 访问一个不存在的方法的时候
__callStatic($name,$list)
访问一个不存在的静态方法的时候
本身也需要是一个静态方法
__sleep() 在使用serialize函数将对象转换为字符串的时候自动调用
有一个数组类型的返回值,数组里面的字段是允许被保留的信息
__wakeup() 在使用unserialize函数将字符串还原为对象的时候
__toString() 在将一个对象直接作为字符串输出的时候
必须有一个字符串类型的返回值
__clone() 在使用clone关键字克隆对象的时候自动调用
__autoload() 用于自动加载
在实例化一个对象 但是类不存在的时候 会自动调用
写在类的外面的,不要加类里面的关键字(public protected)
类名和文件名必须存在关联(通过类名可以拼接出文件名)
*/
//包含一个抽象方法的类就是抽象类 抽象类本身也需要使用 abstract修饰
abstract class Animal{
public $name;
public function play(){
echo '我在玩耍...
';
}
//抽象方法
//不能有方法体 必须以分号结尾
//抽象方法必须被重写(因为本身是一个半成品)
abstract public function eat();
}
抽象类与抽象方法:
/*
作用:
用于定义规范
抽象方法
没有方法体的方法就是抽象方法
抽象方法必须使用abstract修饰
抽象方法不能有花括号
抽象方法必须用分号结尾
抽象方法必须被重写
抽象类
包含抽象方法的类就是抽象类
抽象类也必须使用abstract修饰
抽象类不能直接实例化
抽象类需要被继承之后实现所有方法后才能实例化
如果一个类继承了抽象类,但是没有实现所有抽象方法,那么这个类也是抽象类
*/
/*
抽象方法与接口的差异:
抽象类中除了抽象方法方法还可以有普通方法。
接口里面多有的方法都是抽象方法
*/
/*
多态:不同的人做相同的是,得到不同的结果。
比如几个小伙伴去面试,同一个面试官,有些录取了,有些
没有录取。
*/
//妹子与屌丝和高富帅约会的不同场景。
/*
接口技术
接口的定义
interface 接口名{
[常量]
[抽象方法]
}
实现接口使用 implements 关键字
接口可以多实现
*/
interface USB{
const WIDTH = 100;
//在接口中只能出现抽象方法
//既然所有方法都是抽象方法 就没有必要用abstract标识了
public function run();
public function cha();
}
interface PS2{
public function test();
}
//接口使用 implements 实现 可以实现多个接口
class Computer implements USB,PS2{
public function run(){}
public function cha(){}
public function test(){}
}
$p1 = new Computer;
//接口与接口也可以存在继承的关系 使用 extends 关键字
interface Lenovo extends USB{
public function gun();
}
abstract class Gun{
public function click(){
}
abstract public function move();
}
$err = new Exception('人品太差,哥就是想报错');
//throw $err;
try{
//尝试执行
//将可能产生错误的代码写在这里
echo '我来测试执行
';
if($_GET['a'] > 5){
throw new Exception('输入的数据不合法
');
}
// throw 后续代码不执行 类似 return
echo '测试代码执行完毕
';
}catch(Exception $ex){
//捕获异常 抓去错误
//如果在尝试执行的时候抛出了错误 直接执行这里
echo $ex->getMessage();
}
//退出上面的结构之后 后续代码继续执行
echo '我在后面排队呢。。。
';
转载地址:https://blog.csdn.net/weixin_33245447/article/details/115809500 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!