PHP面向对象

PHP 2021-12-31 67 次浏览 次点赞

面向对象

[https://zh.wikipedia.org/wiki/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1]:

说明:面向对象是一种编程思想,对于小白来说,瞬间掌握,难度很大,需要体会和实践,慢慢领悟,为了防止陷入思想的无底洞,先不用管为什么这么写,前期我们需要先熟悉语法和用法,随着代码量的增多,理解自然会深化.前期一定要先做到以下几点:

  • 类声明语法 试声明student类,有score属性和study方法

  • 权限封装 知道public、 protected、 private各自的可见范围

  • 继承 写A类,再写B类继承自A类,且要重写A类中的某个方法

  • 静态属性与静态方法,知道static静态方法需要用类名::方法名()调用

  • 魔术方法 了解常用魔术方法分别在什么时间被调用

第一个类(试说明函数与对象的区别)

// function fly() {
//     echo "I can fly";
// }
如何改成类? 如下:

class 类名{
}
class是固定写法,后面加类名(类名才用大驼峰)后面直接跟大括号
然后把写的函数复制进去.一个类就写完了

class FirstClass 
{
    public $name = '小明';

    function fly() {
        echo "I can fly";
    }
}
但发现调用的时候报错了.说找不到函数
注意类是需要先new,后调用
$first = new FirstClass();

var_dump($first);//查看返回的类型是什么?
此时注意:返回值是一个对象
调用fly函数后面要
$first -> fly();//调用类中的方法

类的属性和方法

属性(变量):姓名 年龄 性别 身高
方法(函数):苦,笑,走,跑,生气
类:说白了就是整个一个大类,通过属性(变量/名词)和方法(函数/动作),模拟人或者物(对象)的共同特点
$name = '小明';//这是原来的变量声明
class FirstClass 
{
    public $name = '小明';//放在类里面就成了类的属性
                         //不写public报错,因为我们写的不全,类有类的权限控制,需要写public
    function fly() {
        echo "I can fly";
    }
}
说明:php5以后,方法默认不加public也可以调用和执行,默认就是public,之前的版本必须要加public

类的语法

  • 类名,不区分大小写 习惯上市大驼峰
  • 属性名 调用时不加$
  • 函数名
$name = $first -> name;
$first -> fly();

类与对象的关系

类是"大量的,同类事物的共同特点的抽象描述"
而对象,是以上面类作为模版(模子),形成的一个具体实例
工厂里面造汽车的,汽车是由不同的零件做起来的,汽车就是这个类(整个大类)
对象就是成型的不同的汽车.
属性就是:发动机啊,方向盘,轮胎啊
方法就是:跑啊

this是谁?

<?php
class Person
{
    public $name = '隔壁大老李';

    public function learnPHP()
    {
        //伪变量(假变量,替代品,代表谁在说话)
        echo $this->name . "is learning PHP!";
    }
}

$laoli = new Person(); //$this谁调用就是谁.谁实例化就是谁

$name = $laoli->name;

echo "$name";

$laoli->learnPHP();

构造方法和析构方法

构造方法:__construct()
php自带的类方法,是指在new对象时,自动触发的方法
就像婴儿刚出生就会哭,不用叫,也不用调用
利用此方法可以完成一些初始化工作.
<?php 

class Baby {
    function __construct() {
        echo "5555555~~~~~~~";
    }
}

$baby = new Baby();
析构方法:__destruct()
在对象销毁时,自动触发
  public function __destruct(){
      echo 'die';
      }
        

类的继承

继承的好处 :
子类可以继承父类的属性及方法 , 并允许覆盖父类的方法或新增方法.
通过自然界的比喻就是,通过"进化"来获得新特性, 同时不影响旧物种.
class A
{

}
class B extends A
{

}

三种权限控制(修饰符)

public(公有的)protected(受保护的)private(私有的)
外部YNN
子类中YYN
本类中YYY
class GrandFather
{
    public $money = 3000000;
    public function par()
    {
        echo $this->money, '<br>';
    }
}

class Father extends GrandFather
{
    public function sub()
    {
        echo $this->money, '<br>';
    }
}
$wo = new Father();
$wo->par(); //父类可以调用,
$wo->sub(); //自己的也可以用
echo "$wo->money"; //继承类无法调用

方法重写

 final public function myFunc() {
        echo "看你还能不能重写!";
    }
 public function myFunc() {
        echo '我把你重写了,就不给你钱';
    }

类的封装性

封装 : 即禁止某些方法/属性 , 不充许外部调用 .
并开放部分方法 , 来间接调用 .
比如 银行的 ATM, 你可以输入密码 " 检测 " 自己的密码是否正确 ,
但不能 " 查询 " 自己的密码
class ATM
{
    protected $money = 50000;
    protected $pass = 666;

    protected function getPass()
    {
        return $this->$this->pass;
    }

    public function verifyPass($pswd)
    {
        return $pswd == $this->pass;
    }

    public function checkOutMoney()
    {
        return $this->money;
    }
}

$atm = new ATM();

$myPass = 666;

$res = $atm->verifyPass($myPass);
var_dump($res);

$atm -> getPass();

封装MySql类

class MySql
{
    public $link;

    public function __construct()
    {
        $this->con();
    }

    protected $cfg = array(
        'host' => '127.0.0.1',
        'user' => 'root',
        'pwd' => '',
        'db' => 'phpblog',
        'charset' => 'utf8',
    );

    public function con()
    {
        $this->link = mysqli_connect($this->cfg['host'], $this->cfg['user'], $this->cfg['pwd'], $this->cfg['db']);
        if (mysqli_connect_errno($this->link)) {
            echo "连接 MySQL 失败: " . mysqli_connect_error();
        } else {
            echo "连接 MySQL 成功";
            mysqli_query($this->link, 'set names ' . $this->cfg['charset']);
        }
    }

}

$mysql = new MySql();

面向对象.pdf


本文由 fmujie 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论

召唤看板娘