基本概念
OOP(面向对象的编程)使其编程的代码更加简洁、更易于维护、具有很强的可重用性。
OOP达到了软件工程的三个特点:可重用性、灵活性、拓展性
OOP面向对象编程的三个特点:封装、继承、多态
什么是类?
类是一个大的概念,泛指某一类东西
什么是对象?
对象是具体到某类东西中的具体的一个
类包含什么?
成员属性(具体的值)、成员方法(干活)
基本语法
类的声明
简单格式:
【修饰符】 class 类名{ // class关键字后面加空格跟上类名
【成员属性】 // 也叫成员变量
【成员方法】// 也叫成员函数
}
成员属性
格式: 修饰符 $属性名【=属性值】 public $name = ‘zhangsan’;
成员属性不可以是带运算符的表达式,变量、方法或函数调用。
成员方法
【修饰符】function 方法名(参数){
【方法体】
【return 返回值】
}
实例化对象
定义好类之后,使用new关键字来声明对象
$对象名 = new 类名称();
$对象名 = new 类名称(参数名,参数名,…);
对象中成员的访问
$引用名 = new 类名(构造参数,构造参数,…);
$引用名->成员属性 = 属性值; //对象属性赋值
echo $引用名->成员属性; //对象属性输出
$引用名->成员方法(参数); // 调用对象的方法
特殊对象的引用$this
// 声明一个类
class Person{
public $age;
public function say ($word) {
echo “she say {$word}”;
}
public function info () {
$this->say(“hi”);
return $this->age;
}
}
$xiaohong = new Person();
$xiaohong->age = 22;
echo $xiaohong->info();
构造函数
【修饰符】function __construct(【参数】){
程序体
}
当这个类new的时候自动执行
析构函数
【修饰符】function __destruct(【参数】){
程序体
}
用途:可以用于资源的释放操作,比如数据库关闭
对象被销毁的时候执行,没有代码在去运行了,不用再去调用
class Person{
public function construct($name,$age){
echo “我今年” . $age .”岁”;
echo “
“;
$this->age = $age;
$this->name = $name;
}
public function data (){
return $this->age;
}
public function destruct(){
echo “再见”. $this->name;
echo “
“;
}
}
PHP三种访问修饰符
public 公有的(默认)
private 私有的
protected 属保护的
使其尽可能隐藏对象的内部细节,用于达到对成员的访问控制(并非是拒绝访问)
封装后的私有成员不能在对象的外部访问,只能在对象内部使用$this访问
set、get、isset、unset 魔术方法只针对private、protected
class Person
{
public $name = "liming";private $age = 25;protected $money = 10;private $sex = 'girl';private function getAge(){return $this->age;}protected function getMoney(){return $this->money;}public function getAllInfo(){return '我是'.$this->name. ',今年'. $this->age. '岁,我有存款'.$this->money.'元';}// __set设置值,只针对private、protectedpublic function __set($key, $value){if ($key == 'age' && $value == '35') {$this->age = '35';}}// __get获取某个key值public function __get($key) {if ($key == 'age') {echo '获取值';}}// __isset返回结果值public function __isset($key){if ($key == 'money') {return true;}}//__unset 注销掉属性public function __unset($key){echo $key;if ($key == 'sex') {return '注销了';}}
}
$xiaoming = new Person();
$xiaoming->age = 35; // 外部给私有对象赋值,需在对象内部使用__set方法拦截处理,否则会提示没有权限
echo $xiaoming->getAllInfo();
echo $xiaoming->age;
var_dump(isset($xiaoming->money)); // 用var_dump输出表达式的方法输出。isset()判断变量是否存在
unset($xiaoming->sex);
