newstart_開學第三天

OOP面向對象

结构和调用:

class className{} ,调用:$obj = new className();
当类有构造函数时,还应传入参数。如$obj = new className($v,$v2…);

构造函数:

构造函数用于初始化:使用__construct(),可带参数。

在PHP4中也提供了构造函数,但使用的是与类同名的类方法,在PHP5仍能兼容这种做法,当一个类中没有包含__construct时,会查找与类同名的方法,如果找到,就认为是构造函数,如下:
class test{ 
     var $b;
function test() {   
    $this->b=5; 
 }
function addab($c) {   
  return $this->b+$c; 
  }
}
$a = new test();   echo $a->addab(4); // 返回 9
3PHP不会自动调用父类的构造函数(不支持构造函数重载),必须使用parent关键字显式地调用。
class employee{
function __construct()….
}
class Manager extents Employee{
function __construct(){
parent::_construct();
echo ‘这个子类的父类构造函数调用了!’;
}
}
当然也可以调用与该实例没有任何关系的其它类的构造函数。只需在__construct()前加上类名即可。如:
otherClassName::__construct();

类的主家庭成员:属性、方法、常量、静态成員.

關鍵字:

(一)this关键字:用于类的内部指代类的本身。来访问属性或方法或常量,如$this->属性名或方法名。$this::常量名。this还可以用在该类的子类中,来指代本身的属性或方法。
(二)双冒号“::”关键字:用于调用常量、静态成员。
(三)self关键字:在类的内部与双冒号配合调用静态成员,如 self::$staticVar.,在类的内部,不能用$this来调用静态成员。
(四)__toString():在类中使用__toString(),用于将类转成字串并打印类,用处不大:如:

class test{     
  public $p;
public function __toString(){   
  return var_export($this,TRUE);   
  }
}
$a=new test();
echo $a; //输出:test::__set_state(array( ‘p’ => NULL, )),或写成:echo $a->__toString();

extends:

继承: 如class a{ }     class b extends a{ } 类b继承了类a.

方法和属性的作用域:

共有6种:

public(默认,可省略,也等同于php6的var声明)

private(私有,也不能由子类使用)

protected(私有,但可由子类使用) 

abstract(抽象)

final(阻止在子类中覆盖—也称重载,阻止被继承,用于修饰类名及方法,如final class test{ final function fun(){}} ,但不能用于属性)

static(静态).

抽象和抽象方法:

抽象可以理解成父类为子类定义了一个模板或基类。作用域abstract只在父类中声明,但在子类中实现。注意事项:
1、抽象类不能被实例化,只能被子类(具体类)继承后实现。
2、抽象类必须在其子类中实现该抽象类的所有抽象方法。否则会出错。
3、在抽象方法中,只是声明,但不能具体实现:如abstract function gettow(){ return $this->p; }是错的,只能声明这个方法:abstract function gettow();(连方括号{}都不要出现),抽象方法和抽象类主要用于复杂的类层次关系中。该层次关系需要确保每一个子类都包含并重载了某些特定的方法。这也可以通过接口实现
4、属性不能被命名为抽象属性,如abstract $p = 5是错的。
5、只有声明为抽象的类可以声明抽象方法,但如果方法声明为抽象,就不能具体实现。

待續.






你可能感兴趣的:(newstart_開學第三天)