萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> php中$this、static、final、const、self的用法

php中$this、static、final、const、self的用法

   本篇文章主要分項了一下關於php類中的$this,static,final,const,self這幾個關鍵字使用方法。

  $this

  $this表示當前實例,在類的內部方法訪問未聲明為const及static的屬性時,使用$this->value='phpernote';的形式。常見用法如:

  $this->屬性

  $this->方法

  舉例如下:

 代碼如下   <?php
class MyClass{
 private $name;
 public  function __construct($name){
  $this->name=$name;
 }
 public function getname(){
  return $this->name;
 }
 public  function printName(){
  echo $this->getname();
 }
}
$myclass= new MyClass("I Like www.111cn.net");
$myclass->printName();//輸出:I Like www.111cn.net
?>

  在類裡面調用當前類的屬性和方法有三種方法,分別是self、parent、$this,這三個關鍵字的區別是:self用來指向當前的類;parent用於指向當前類的父類,可以使用該關鍵字調用父類的屬性和方法;$this用來在類體內調用自身的屬性和方法。

  static

  關鍵字可以是self(在類內部調用靜態成員時所使用)靜態成員所在的類名(在類外調用類內部的靜態成員時所使用)

  聲明一個靜態變量如下:

  static $val='';

  只存在於函數作用域的變量,函數執行之後變量的值不會丟失,只會初始化一次,初始化靜態變量不能使用表達式,不用全局變量代替是因為全局變量會被所有函數訪問容易造成維護不宜。

  在類中使用static有兩種主要用途、定義靜態成員和定義靜態方法。靜態成員只保留一個變量的值,這個值對所有實例都是有效的,如下:

 代碼如下   <?php
class MyObject{
 public static $myStaticVar=0;
 function myMethod(){
  self::$myStaticVar+=2;
  echo self::$myStaticVar;
 }
}
$instance1=new MyObject();
$instance1->myMethod();
$instance2=new MyObject();
$instance2->myMethod();

  //結果將分別打印2、4

 代碼如下  

<?php
class Book{
 static $num=0;
 public function showMe(){
  echo"您是滴".self::$num."位訪客";
  self::$num++;
 }
}
$book1=new Book();
$book1->showMe();
echo"<br>";
$book2=new Book();
$book2->showMe();
echo"<br>";
echo"您是滴".Book::$num."位訪客";
?>

  結果將是:

  您是滴0位訪客

  您是滴1位訪客

  您是滴2位訪客

  另外需要注意的是如果類的方法是static的,他所訪問的屬性也必須是static的。

  final

  PHP final關鍵字可以修飾類同樣可以修改類中的方法,但它們的作用是差不多的,即如果你使用了final關鍵字來修飾了,那麼這個被修飾的類或者方法將不能被擴展或者繼承。你只能老老實實去引用它。如果你在類前面使用了final,這就是說明這個類不能使用繼承;如果你在方法前使用了PHP final關鍵字,這就是說明這個方法不能被覆蓋。道理就是這麼簡單,讓我們也看個簡單的示例吧。

  最終的類和方法,不能繼承,該關鍵字修飾的方法不能被重寫。一般用法如下:

  final class MyClass{//此類將不允許被繼承

  final function fun1(){......}//此方法將不允許被重寫

  }

  例

 代碼如下       < ?PHP   
    final class BaseClass {   
    public function test() {   
    echo "BaseClass::test() calledn";   
    }   
    final public function moreTesting() {   
    echo "BaseClass::moreTesting() calledn";   
    }   
    }   
    class ChildClass extends BaseClass {   
    public function moreTesting() {   
    echo "ChildClass::moreTesting() calledn";   
    }   
    }   
    // Results in Fatal error: Cannot override final method BaseClass::moreTesting()   
    ?> 

  const

  在類的內部方法訪問已經聲明為const及static的屬性時,需要使用self::$name的形式調用。舉例如下:

 代碼如下   <?php
class clss_a{
 private static $name="static class_a"; 
 const PI=3.14; 
 public $value; 
 public static function getName(){ 
  return self::$name; 
 } 
 //這種寫法有誤,靜態方法不能訪問非靜態屬性 
 public static function getName2(){ 
  return self::$value; 
 } 
 public function getPI(){ 
  return self::PI; 
 }
}

  注意const屬性的申明格式是const PI=3.14,而不是const $PI=3.14。

  self

  self表示類本身,指向當前的類。通常用來訪問類的靜態成員、方法和常量。

copyright © 萬盛學電腦網 all rights reserved