PHP 自学笔记 (2)

今天学的东西,需要有OOP的观念,也就是物件导向的观念,由于之前自己学过JS后,以为物件都是可以直接创建。但事实并非如此,而是需要搭配class(类)来创建我们的物件。

class好比设计蓝图,而我们可以利用这个蓝图,去创建物件。如class Car => 创建 obj Audi、obj Toyota、一些method...

class命名不可为数字开头,大小写没有分,所以不能在宣告一个class dog。

而此处我们宣告变数,型态有public为开放,内外都可呼叫,如果没有特别加,预设就是publicprivate为私有(一般会在前面加上底线),只能在当前类的内部呼叫,而其实还有一个叫做protected受保护,跟private一样只能在类的内部呼叫、取用,而之后会操作并详解。而通常不会在class宣告变数的地方赋予初始值,除非所有实体化的物件需要某个属性是统一的值,大多都是使用private或protected来增加对属性的控制性,一般都是透过方法来实现对属性的修改。

class Dog {    private $_breed;    private $_age;    private $_gender;}

建构式(__construct() ),也就是在new完物件后,会执行一次,也就是初始化的概念。
此处我们利用建构式,获取物件所传来的参数,并赋予给我们宣告好的变数。

    public function  __construct($objBreed, $objAge, $objGender)    {        // 利用$this可以指向obj本体        $this->_breed = $objBreed;        $this->_age = $objAge;        $this->_gender = $objGender;        $this->display();    }

而我们在class外面,利用new去创建一个实体化物件。

// $bogi = new Dog;// 如果在建构式需要传入参数,就须加入()。$bogi = new Dog("doge", 20, "male");var_dump($bogi);// object(Dog)#1 (3) { ["_breed":"Dog":private]=> string(4) "doge" ["_age":"Dog":private]=> int(20) ["_gender":"Dog":private]=> string(6) "female" }// 这个Dog物件有3个属性 ["对应属性名及详情"] => 属性值的类型(长度) "属性值

而后我们在class内写了一些方法,display在初始化的时候,用来呼叫我们的方法及一些数据等等。
在class外要指向对应属性需要,$物件名->属性名如:$bogi-> _ breed(如果为变数为private则无法从外面指向),而在class内仅需$this即可指向如:$this-> _ breed 。

    public function display()    {        // return $age; //这样写$age只是纯变数,与我们所设置的public $age(物件中的属性)无相关        // 利用$this可以指向obj本体($bogi),藉此来指向物件下的属性        // return $this->_gender;        echo $this->sleep();        echo  "<br/>";        echo $this->showBreed();        echo  "<br/>";        echo $this->showAge();        echo  "<br/>";        echo $this->showGender();        echo  "<br/>";        $this->changeGender('female');        echo $this->showGender();        echo "<hr/>";        $this->removeAge();    }    public function showBreed()    {        echo $this->_breed;    }    public function showAge()    {        echo $this->_age;    }    public function showGender()    {        echo $this->_gender;    }

我们可以在函数中去更改属性值,观察删除后的物件,我们在此处在创建一个物件bogi2去做比较,可发现age已被删除,很少用到删除及新增,大多使用修改读取居多。

    // 更改性别    private function changeGender($gender)    {        // 修改属性        $this->_gender = $gender;    }    // 删除年龄    private function removeAge()    {        // 删除属性        unset($this->_age);    }   $bogi2 = new Dog("shiba", "87", "female");   var_dump($bogi2);   echo "<hr>";

http://img2.58codes.com/2024/20126182e3fRKA7Bb4.png

CLASS 可以获取类别名称,而通常以const来设置常数,与js相同,但如果我们想获取常数的话,无法用一般的方法进行获取($jojo->PI),因为它会去物件下找为$PI的常数,但我们并没有,之后会讲解如何获取常数的部分。

class Human{    public function display()    {        echo  __CLASS__;    }    // 设置常数    const PI = 3.14;}$jojo = new Human();// 想要读取常数的话,这样会获取不到,因为它会去找为$PI的常数,但我们并没有。$jojo->PI;$jojo->display(); //Human

http://img2.58codes.com/2024/20126182w80Z0MrsDJ.png

而这是在网上抓的一个基本php执行的流程。
http://img2.58codes.com/2024/20126182jNqeO7q7gU.png


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章