您现在的位置:首页 > 教案格式 > 正文

数组换位置一.介绍 PHP(外文名:PHP: Hyperte(22)

2018-02-02 05:05 网络整理 教案网

判断是否存在:isset(对象->属性;) ===>自动调用类中的__isset()方法

销毁:unset(对象->属性;) ===>自动调用类中的__unset()方法

<?php
class C1{
  public $v1 = 1;
  public $propArr = array();
  function __get($propName){
    if(isset($this->propArr[$propName])){
      return $this->propArr[$propName];
    }
    return "不存在的属性 $propName";
  }
  
  function __set($propName,$value){
    $this->propArr[$propName] = $value;
  }
  
  function __isset($propName){
    if(isset($this->propArr[$propName])){
      return true;
    }
    return false;
  }
  
  function __unset($propName){
    unset($this->propArr[$propName]);
  }
}
$obj = new C1();
$obj->v2 = 123;
echo $obj->v2;//123
echo isset($obj->v2);//1
unset($obj->v2);

当使用一个对象调用一个不存在的普通方法的时候,会自动去调用预先定义好的“__call”方法。

<?php
class C1{
  function f1(){
    echo ‘f1‘;
  }
  function f2($v){
    echo "f2 $v";
  }
  function __call($name, $array){
    $count = count($array);
    if($count == 0){
      $this->f1();
    }elseif($count == 1){
      $this->f2($array[0]);
    }
  }
}
$obj = new C1();
$obj->ff();
$obj->ff("123");

接口中只有两类最简单特性信息:(没有普通方法)

接口常量:其实就是常量

抽象方法:只有方法名,没有方法体

接口可以看作是抽象类的更高层面的抽象规范,不考虑接口常量的话,那么就相当于之规定了下级类要做什么,至于怎么就,没有规定。

接口可以实现“多继承”(多实现),而类不行。

一个类只能继承一个父类,但可以实现多个“上级接口”,语法形式:

class 类A extends 类B implements 接口1,接口2,... {...}

一个接口同样可以继承另一个接口(也是单继承):

interface 接口1 extends 接口2{...}

<?php
interface I1{
  const V1 = 1;
  function f1();
}
interface I2 extends I1{
  const V2 = 2;
  function f2();
}
class C1 implements I1,I2{
  public function __construct(){
    echo self::V1;
    echo self::V2;
  }
  function f1(){}
  function f2(){}
}
$o1 = new C1();