内容详情 您现在的位置是: 首页> PHP

php面向对象

发布时间:2022-05-21 08:29 已围观:1959

摘要php面向对象

面向对象的程序设计缩写为OOP,即Object-oriented programming

 

对象的主要三个特性:对象的行为、形态和表示

 

面向对象内容

类 对象 成员变量 成员函数 继承 父类 子类 多态 重载 抽象性 封装 构造函数 析构函数

 

类定义

语法:

class myclass{

}

类使用class关键字后加上类名定义,{}内可以定义变量(使用var来声明,也可以初始化值)和方法

 

创建对象

类创建后,可以使用new运算符来实例化该类的对象

 

调用成员方法(->用于对象执行方法或取得属性)

比如:

 <?php
class Site {
  /* 成员变量 */
  var $url;
  var $title;
  
  /* 成员函数 */
  function setUrl($par){
     $this->url = $par;
  }
  
  function getUrl(){
     echo $this->url . PHP_EOL;
  }
  
  function setTitle($par){
     $this->title = $par;
  }
  
  function getTitle(){
     echo $this->title . PHP_EOL;
  }
}

$runoob = new Site;
$taobao = new Site;
$google = new Site;

// 调用成员函数,设置标题和URL
$runoob->setTitle( "菜鸟教程" );
$taobao->setTitle( "淘宝" );
$google->setTitle( "Google 搜索" );

$runoob->setUrl( 'www.runoob.com' );
$taobao->setUrl( 'www.taobao.com' );
$google->setUrl( 'www.google.com' );

// 调用成员函数,获取标题和URL
$runoob->getTitle();
$taobao->getTitle();
$google->getTitle();

$runoob->getUrl();
$taobao->getUrl();
$google->getUrl();
?> 

结果为:

菜鸟教程
淘宝
Google 搜索
www.runoob.com
www.taobao.com
www.google.com

 

构造函数

用来在创建对象时初始化对象, 即为对象成员变量赋初始值,在创建对象的语句中与new运算符一起使用

语法:

void __construct ()

比如:

function __construct( $par1, $par2 ) {
   $this->url = $par1;
   $this->title = $par2;
}

 

析构函数

与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数

语法:

void __destruct ( void )

比如:

<?php
class MyDestructableClass {
   function __construct() {
       print "构造函数n";
       $this->name = "MyDestructableClass";
   }

   function __destruct() {
       print "销毁 " . $this->name . "n";
   }
}

$obj = new MyDestructableClass();
?>

结果为:

构造函数
销毁 MyDestructableClass

 

继承

使用extends来继承一个类

语法:

class child extends parent {

}

 

方法重写

如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖,也称为方法的重写

 

访问控制

php对属性或方法的访问控制,是通过在前面添加关键字来实现的

public:公有的类成员可以在任何地方被访问

protected:受保护的类成员则可以被其自身以及其子类和父类访问

private:私有的类成员则只能被其定义所在的类访问

比如:

class MyClass
{
    // 声明一个公有的构造函数
    public function __construct() { }

    // 声明一个公有的方法
    public function MyPublic() { }

    // 声明一个受保护的方法
    protected function MyProtected() { }

    // 声明一个私有的方法
    private function MyPrivate() { }
    }
}

 

接口

接口通过interface关键字来定义,实现一个接口,使用implements操作符

接口中定义的所有方法都必须是公有,这是接口的特性

类中必须实现接口中定义的所有方法

比如:

<?php

// 声明一个'iTemplate'接口
interface iTemplate
{
    public function setVariable($name, $var);
    public function getHtml($template);
}


// 实现接口
class Template implements iTemplate
{
    private $vars = array();
  
    public function setVariable($name, $var)
    {
        $this->vars[$name] = $var;
    }
  
    public function getHtml($template)
    {
        foreach($this->vars as $name => $value) {
            $template = str_replace('{' . $name . '}', $value, $template);
        }
 
        return $template;
    }
}

 

常量

可以把在类中始终保持不变的值定义为常量。在定义和使用常量的时候不需要使用$符号

比如:

<?php
class MyClass
{
    const constant = '常量值';

    function showConstant() {
        echo  self::constant . PHP_EOL;
    }
}

echo MyClass::constant . PHP_EOL; // ::代表调用类中的静态方法或者常量,属性
?>

 

抽象类

任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的

定义为抽象的类不能被实例化

被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现

子类方法可以包含父类抽象方法中不存在的可选参数

比如:

abstract class AbstractClass
{
 // 强制要求子类定义这些方法
    abstract protected function getValue();
    abstract protected function prefixValue($prefix);

    // 普通方法(非抽象方法)
    public function printOut() {
        print $this->getValue() . PHP_EOL;
    }
}

 

static关键字

声明类属性或方法为static,就可以不实例化类而直接访问

静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)

由于静态方法不需要通过对象即可调用,所以伪变量$this在静态方法中不可用

静态属性不可以由对象通过->操作符来访问

 

final关键字

如果父类中的方法被声明为final,则子类无法覆盖该方法。如果一个类被声明为final,则不能被继承

 

php不会在子类的构造方法中自动的调用父类的构造方法。要执行父类的构造方法,需要在子类的构造方法中调用parent::__construct()

声明:本文内容摘自网络,版权归原作者所有。如有侵权,请联系处理,谢谢~
转发:大湘菜--https://www.cnblogs.com/daxiangcai/p/16275160.html

赞一个 (432)