菜单

澳门金沙国际PHP 面向对象

2019年1月29日 - 金沙编程资讯

PHP接口

PHP接口(interface)效率类似于继续中的父类,接口是用来给任何的类继承用的,但是接口中定义的不二法门都是从未有过方法体的且定义的不二法门必须是公有的。
举例:

<?php
    interface iTemplate{
        public function eat($food);
        public function learn($code);
    }
    class student implements iTemplate{
        public function eat($food){
            echo "student eat {$food}";
        }
        public function learn($code){
            echo "student learn {$code}";
        }
    }
    $student = new student();
    $student->eat('apple');
    echo '<br />';
    $student->learn('PHP');
?>

输出:

student eat apple
student learn PHP

接口中除去艺术也是可以定义属性的,但必须是常量。

<?php
    interface iTemplate{
        public function eat($food);
        public function learn($code);
        const A='我是常量';
    }
    class student implements iTemplate{
        public function eat($food){
            echo "student eat {$food}";
        }
        public function learn($code){
            echo "student learn {$code}";
        }
        public function changliang(){
            echo ITemplate::A;
        }

    }
    $student = new student();
    $student->eat('apple');
    echo '<br />';
    $student->learn('PHP');
    echo '<br />';
    $student->changliang();
?>

输出:

student eat apple
student learn PHP
我是常量

那就是说既然是概念给任何类使用,就存在继续的难题,接口是足以多连续的。
举例:

<?php
    interface iTemplate1{
        public function eat($food);
    }
    interface iTemplate2{
        public function learn($code);
    }
    class student implements iTemplate1,iTemplate2{
        public function eat($food){
            echo "student eat {$food}";
        }
        public function learn($code){
            echo "student learn {$code}";
        }
    }
    $student = new student();
    $student->eat('apple');
    echo '<br />';
    $student->learn('PHP');
?>

输出:

student eat apple
student learn PHP

这么就在student类中持续了iTemplate1iTemplate2接口,话可以先让iTemplate2接口继承iTemplate1接口,再让student类去继续iTemplate1接口,已毕的作用同上。
举例:

<?php
    interface iTemplate1{
        public function eat($food);
    }
    interface iTemplate2 extends iTemplate1{
        public function learn($code);
    }
    class student implements iTemplate2{
        public function eat($food){
            echo "student eat {$food}";
        }
        public function learn($code){
            echo "student learn {$code}";
        }
    }
    $student = new student();
    $student->eat('apple');
    echo '<br />';
    $student->learn('PHP');
?>

澳门金沙国际,输出:

student eat apple
student learn PHP

小结一下:

窘迫的地方还望dalao们指正。

接口 interface

PHP
类是单继承,也就是不扶助多屡次三番,当一个类要求四个类的效果时,继承就无法了,为此
PHP 引入了类的接口技术。

假定一个抽象类里面的所有办法都是画个饼来解除饥饿方法,且并未注脚变量,而且接口里面有着的分子都是
public 权限的,那么这种新鲜的抽象类就叫 接口 。

接口是特殊的抽象类,也足以看作是一个模子的正统。

一、抽像类(abstract) 在大家其实成本进度中,有些类并不必要被实例化,如前方学习到的有些父类,重即使让子类来延续,那样可以压实代码复用性
语法结构:

简介


PHP
对待对象的办法与引用和句柄相同,即每个变量都享有对象的引用,而不是全体对象的正片。

接口的特色
  1. 接口的艺术必须是当着的。
  1. 接口的格局默许是空洞的,所以不在方法名前边加abstract。
  2. 接口可以定义常量,但不能定义成员属性,常量的定义和用法和类中常量一致。
  3. 类可以兑现七个接口。
  4. 接口也得以持续接口。
  5. 接口使用主要字 interface 来定义,并运用主要字 implements
    来贯彻接口中的方法,且务必完全落到实处。

复制代码 代码如下:

基本概念


举例
<?php
//定义接口
interface User{
    function getDiscount();
    function getUserType();
}
//VIP用户 接口实现
class VipUser implements User{
    // VIP 用户折扣系数
    private $discount = 0.8;
    function getDiscount() {
        return $this->discount;
    }
    function getUserType() {
        return "VIP用户";
    }
}
class Goods{
    var $price = 100;
    var $vc;
    //定义 User 接口类型参数,这时并不知道是什么用户
    function run(User $vc){
        $this->vc = $vc;
        $discount = $this->vc->getDiscount();
    $usertype = $this->vc->getUserType();
        echo $usertype."商品价格:".$this->price*$discount;
    }
}

$display = new Goods();
$display ->run(new VipUser);    //可以是更多其他用户类型
?>

//输出:VIP用户商品价格:80 元 

abstract class 类名{
属性 $name;
艺术(){} //方法也得以为abstract 修饰符 function 方法名(){}
}

类的概念:

<?php
class SimpleClass
{
    // property declaration
    public $var = 'a default value';

    // method declaration
    public function displayVar() {
        echo $this->var;
    }
}
?>
抽象类和接口的界别
  1. 一个子类即使 implements
    一个接口,就务须完成接口中的所有办法(不管是还是不是须要);即使是一而再一个抽象类,只要求已毕需要的措施即可。
  1. 若果一个接口中定义的方法名转移了,那么富有完毕此接口的子类需求一块创新方法名;而抽象类中假若措施名转移了,其子类对应的点子名将不受影响,只是变成了一个新的主意而已(相对老的法门完成)。
  2. 抽象类只可以单继承,当一个子类须求完毕的功效必要持续自多个父类时,就不可能不运用接口。

例:

类的实例化:

<?php
$instance = new SimpleClass();

// 也可以这样做:
$className = 'Foo';
$instance = new $className(); // Foo()
?>

<?php

$instance = new SimpleClass();

$assigned   =  $instance;
$reference  =& $instance;

$instance->var = '$assigned will have this value';

$instance = null; // $instance and $reference become null

var_dump($instance);
var_dump($reference);
var_dump($assigned);
?>

输出:

NULL
NULL
object(SimpleClass)#1 (1) {
   ["var"]=>
     string(30) "$assigned will have this value"
}

复制代码 代码如下:

继承

PHP不帮助多重继承,一个类只可以接二连三一个基类。
被三番五次的不二法门和质量可以透过用同一的名字重新讲明被遮住。不过假诺父类定义方法时使用了
final,则该方法不可被遮盖。可以经过 parent::
来访问被掩盖的办法或性质。
当覆盖措施时,参数必须保持一致否则 PHP 将发生 E_STRICT
级其他错误音讯。但构造函数例外,构造函数可在被遮盖时采纳分歧的参数。

abstract class animal{
public $name;
public $age;
//抽象方法无法有方法体,紧假如为了让子类去达成;
abstract public function cry();
//抽象类中可以涵盖抽象方法,同时也可以包含实例类情势
public function getname(){
echo $this->name;
}
}
class Cat{
public function cry(){
echo ‘ok’;
}
}

::class

自 PHP 5.5 起,关键词 class 也可用来类名的解析。使用 ClassName::class
你可以赢得一个字符串,包罗了类 ClassName 的通通限定名称。那对利用了
命名空间 的类尤其有用。

<?php
namespace NS {
    class ClassName {
    }

    echo ClassName::class;
}
?>

输出:

NS\ClassName

精通:动物类,实际上是一个空洞的概念,它规定了一部分动物有些哪一块的品质和行为,但实质上它自己并没收有那多少个属性和行事。再譬如:交通工具类,植物类等等

属性


属性中的变量可以开端化,可是先河化的值必须是常数,那里的常数是指 PHP
脚本在编译阶段时就足以获取其值,而不信赖于运作时的消息才能求值。

比方直白动用 var 申明属性,而从未用 public,protected 或 private
之一,PHP 5 会将其就是 public。

在类的分子方法里面,可以用 ->(对象运算符):$this->property(其中
property 是该属性名)那种情势来访问非静态属性。静态属性则是用
::(双冒号):self::$property 来访问。

<?php
class SimpleClass
{
   // 错误的属性声明
   public $var1 = 'hello ' . 'world';
   public $var2 = <<<EOD
hello world
EOD;
   public $var3 = 1+2;
   public $var4 = self::myStaticMethod();
   public $var5 = $myVar;

   // 正确的属性声明
   public $var6 = myConstant;
   public $var7 = array(true, false);

   //在 PHP 5.3.0 及之后,下面的声明也正确
   public $var8 = <<<'EOD'
hello world
EOD;
}
?>

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图