php面向对象简单概括

基本知识

类:具有相同属性方法的一类集合体。比如雪佛兰汽车是一个雪佛兰汽车类,奔驰汽车是一个奔驰汽车类,宝马汽车是一个宝马汽车类,而这三个类又是汽车大类的子类。
对象:类的一个具体实现,比如宝马Q5就是宝马汽车类的一个具体实现。对象地使用是放在内存中的。一下让我们了解一下对象在内存中的分配

5.png


使用面向对象,就是灵活地使用以上两个知识点。让我们来创建和使用类与对象

<?PHP
    /**
    *新建一个类
    */
    class newClass{        public $a;        public $b;        public function funA(){            echo I am function A;
        }        public function funB(){            echo I am function B;
        }
    }    /**
    *使用类创建对象
    */
    $opt=new newClass();
    $opt->a=opt;//将opt对象中的a属性赋值为opt
    $opt->funA();//打印出I am function A?>


修饰符:在定义类与类中的属性时,我们可以使用如下三个修饰符,若不加,则认为public
public:权限最大
protected:权限范围在其本身与其子类
private:权限范围仅在其本身
<font color=blue size=4>构造函数与析构函数</font>:在我们对类实例化创建对象时,往往需要对对象进行初始化,这时,我们就需要在类中定义一个构造方法。当我们使用完对象时,就需要释放对象,以减少内存的使用,这时我们就需要使用析构方法
PHP中我们使用__construct()方法与__destruct(),如下代码

<?PHP
class newClass{
    public $a;
    public $b;
    public function __construct($a,$b){
        $this->a=$a;
        $this->b=$b;
        echo 我是构造函数;
    }
    public function __destruct(){
        echo 我是析构函数;
    }
}
?>

封装性

当我们开发一些重要的程序模块时,常常不希望别人能轻易访问这些程序模块的数据,因此需要对这些数据进行封装。这时我们要进行数据的访问控制,常常使用<font color=red>private</font>关键字来对这些属性方法进行封装。
如下:

<?PHP
class privateClass
{
    private $a;
    private $b;
    private function privateFun()
    {
        echo 我是封装的方法;
    }
} ?>

这样,当我们创建对象时就不能调用私有的属性方法。但是我们可以通过使用魔术方法来对这些私有属性方法进行访问。
__set()与__get()的使用
通过__set()方法我们可以通过对象直接设置成员属性
通过__get()方法我们可以通过对象直接获取成员属性

<?PHP
class setClass
{        
     private $a;        
    private $b=ww;        
    public function __set($oldValue,$newvalue){ 
        $this->$oldValue=$newvalue;
    }        
    public function __get($newvalue){            
        return $newvalue;
    }
}
    $opt= new setClass();
    $opt->a=sss;//直接设置私有属性值
    echo $opt->b;//直接读取私有属性值
?>

__isset()与__unset()的使用
通过__isset()直接查看对象中私有属性是否存在
通过__unset()直接删除对象中的私有属性

<?PHP
class issetClass
{
    private $a;
    private $b = 'www';
    function __isset($privateName)
    {
        if (isset($privateName)) {
            return 1;
        } else {
            return 0;
        }
    }
    function __unset($privateName)
    {
        echo 销毁 . $privateName;
    }
}
$opt = new issetClass();
echo isset($opt->$b);
var_dump(unset($opt->$b));?>

继承性

当我们编写多个类时,常常多个类具有相同的属性方法,为了简化代码我们引入了继承的概念,子类可以继承父类的一些属性方法,减少了冗余代码地编写。

如何编写继承类
我们使用关键字extends来编写子类

<?PHP
    class parentClass{
    }    
    class childClass extends parentClass{
    }    
?>

如上,childClass是parentClass的子类,PHP支持单继承,即一个子类只有一个父类,但父类可以有多个子类。

重写父类方法
父类中的方法不能满足子类的使用时我们可以重写父类方法。但当我们又想在子类使用父类方法时,我们可以使用如下语法:parent::方法名几个重要的关键字

3.1 final

final可以修饰类与方法,不能修饰成员属性
被final修饰的类不能继承,而用final修饰的方法在子类中不能被重写

3.2 static

static可以修饰成员属性与成员方法,不能修饰类;
使用static修饰的成员与方法可以通过类直接使用,使用如下语法:类名::\$属性名或方法名();
在类中使用时通过如下语法:self::\$属性名或方法名.

3.3 const

在类中声明常量使用const,而不是使用define();
比如 const TT=90当使用常量时直接使用如下语法self::常量名

3.4 instanceof

使用该关键字可以检测某个实例是否是某个类的实例。

3.5 trait

PHP只能进行单继承,但它同时提供了另类方式来进行代码复用,解决单继承问题。
如下

<?PHP

trait testA
{
    function a()
    {
    }
}

trait testB
{
    function b()
    {
    }
}

class testC
{
    use testA, testB;

    function c()
    {
    }
} ?>

抽象技术

用abstract关键字修饰的方法与类称为抽象方法或抽象类。
声明抽象类与抽象方法

<?PHP
abstract class testClass
{
$a;
$b;
    abstract function testFun();
    abstract function testFun1();
    public function optFun()
    {
        echo 抽象类中的抽象方法;
    }//抽象类可以有非抽象方法
}
class childClass extends testClass
{
    function testFun()
    {
        echo 子类中实现抽象方法;
    }
    function testFun1()
    {
        echo 子类实现抽象方法;
    }
}
abstract child1Class extends testClass
{
}//子类是抽象方法可以不实现父类的抽象方法?>

抽象技术为子类的声明提供了一种规范,限制了类的实例化(抽象类不能实例化)。

接口技术

接口是一种特殊的抽象类,接口中只能声明抽象类与常量
声明接口使用interface,实现接口使用implements,修饰符只能是认的public;
一个子类可以继承多个接口,同时继承一个父类

<?PHP
interface newInterface
{
    const V = 12;
    abstract function fun1();
    abstract function fun2();
}
interface newInterface1
{
    abstract function fun3();
    abstract function fun4();
}
class parentClass
{
    function fun5()
    {
        echo fun5;
    }
}
class optClass extends parentClass implements newInterface, newINterface1
{
    function fun1()
    {
        echo fun1;
    }
    function fun2()
    {
        echo fun2;
    }
    function fun3()
    {
        echo fun3;
    }
    function fun4()
    {
        echo fun4;
    }
} ?>

多态

PHP中多态地实现需要一个类通过多个子类地继承实现,如果一个类的方法在多个子类中重写并实现不同的功能,我们称之为多态。

推荐教程:《PHP教程

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返回预支付订单号的接口,目前微信支付所有场景均使用这一接口。下面介绍的是其中NATIVE的支付实现流程与PC端实现扫码支付流程
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返回预支付订单号的接口,目前微信支付所有场景均使用这一接口。下面介绍的是其中APP的支付的配置与实现流程
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户信息这个功能的开发流程。 配置 1.首先得在微信公众平台申请一下微信小程序账号并获取到小程序的AppID和AppSecret https://mp.weixin.qq.com/cgi-bin/loginpage?url=%2Fwxamp%2F
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一款开源且免费商用的后台开发框架,它基于ThinkPHP和Bootstrap两大主流技术构建的极速后台开发框架,它有着非常完善且强大的功能和便捷的开发体验,使我逐渐喜欢上了它。
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛,就离不开通讯了,然后我就想到了长连接。这里本人用的是GatewayWorker框架。
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返回预支付订单号的接口,目前微信支付所有场景均使用这一接口。下面介绍的是其中JSAPI的支付实现流程
服务器优化必备:深入了解PHP8底层开发原理
Golang的网络编程:如何快速构建高性能的网络应用?
Golang和其他编程语言的对比:为什么它的开发效率更高?
PHP8底层开发原理揭秘:如何利用新特性创建出色的Web应用
将字符重新排列以形成回文(如果可能)在C++中
掌握PHP8底层开发原理和新特性:创建高效可扩展的应用程序
服务器性能优化必学:掌握PHP8底层开发原理
PHP8新特性和底层开发原理详解:优化应用性能的终极指南
将 C/C++ 代码转换为汇编语言
深入研究PHP8底层开发原理:创建高效可扩展的应用程序
C++程序查找法向量和迹
PHP8底层开发原理实战指南:提升服务器效能
重排数组,使得当 i 为偶数时,arr[i] >= arr[j],当 i 为奇数时,arr[i] <= arr[j],其中 j < i,使用 C++ 语言实现
Golang的垃圾回收:为什么它可以减少开发人员的负担?