基本概念

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
{

  1. public $name = "liming";
  2. private $age = 25;
  3. protected $money = 10;
  4. private $sex = 'girl';
  5. private function getAge(){
  6. return $this->age;
  7. }
  8. protected function getMoney(){
  9. return $this->money;
  10. }
  11. public function getAllInfo(){
  12. return '我是'.$this->name. ',今年'. $this->age. '岁,我有存款'.$this->money.'元';
  13. }
  14. // __set设置值,只针对private、protected
  15. public function __set($key, $value){
  16. if ($key == 'age' && $value == '35') {
  17. $this->age = '35';
  18. }
  19. }
  20. // __get获取某个key值
  21. public function __get($key) {
  22. if ($key == 'age') {
  23. echo '获取值';
  24. }
  25. }
  26. // __isset返回结果值
  27. public function __isset($key){
  28. if ($key == 'money') {
  29. return true;
  30. }
  31. }
  32. //__unset 注销掉属性
  33. public function __unset($key){
  34. echo $key;
  35. if ($key == 'sex') {
  36. return '注销了';
  37. }
  38. }

}

$xiaoming = new Person();
$xiaoming->age = 35; // 外部给私有对象赋值,需在对象内部使用__set方法拦截处理,否则会提示没有权限
echo $xiaoming->getAllInfo();
echo $xiaoming->age;
var_dump(isset($xiaoming->money)); // 用var_dump输出表达式的方法输出。isset()判断变量是否存在
unset($xiaoming->sex);