php 类学习,php的类学习(一)
function __autoload($class_name){
//require_once語句在腳本執(zhí)行期間包含并運行指定文件。此行為和 require()語句完全相同,唯一區(qū)別是如果該文件中的代碼已經(jīng)被包含了,則不會再次包含
require_once $class_name . '.php';
}
$obj =new testAAA();
$obj2=new type();
?>
類的屬性
1)類的變量成員叫做“屬性”,或者叫“字段”、“特征”,在本文檔統(tǒng)一稱為“屬性”。
2)屬性聲明是由關鍵字public或者protected或者 private開頭,然后跟一個變量來組成
3)屬性中的變量可以初始化,但是初始化的值必須是常數(shù),這里的常數(shù)是指php腳本在編譯階段時就為常數(shù),而不是在編譯階段之后在運行階段運算出的常數(shù)。說明:為了兼容php4,php5聲明屬性依然可以直接使用關鍵字var,或者放在public,
4)在類的成員方法里面,可以通過$this->property(property是屬性名字)這種方式來訪問類的屬性、 方法.
5)要訪問類的靜態(tài)屬性或者在靜態(tài)方法里面卻不能使用訪問屬性的方法,而是使用self::$property
6)在類的非靜態(tài)方法里面可以使用偽變量$this,這個偽變量是調(diào)用該方法的實例化對象引用protected, or private之前。但是var并不是必須的。<?php
class SimpleClass{
//錯誤的屬性聲明
// public $var1='hello'.' World';
// public $var2=<<
//hello world
//EO;
// public $var3=1+2;
// public $var4=self::myStaticMethod();
// public $var5=$myvar;
//正確的屬性聲明
public $var6=myConstant;
public $var7=array(true,false);
//在php5.3.0及其以后,下面的聲明也正確
public $var8=<<
hello world
EOD;
}
?>
類常量
們可以在類中定義常量。常量的值將始終保持不變。在定義和使用常量的時候不需要使用$符號。常量的值必須是一個定值<?php
class ConstantClass{
const constant='常量值';
function showConstant(){
echo self::constant."
";
}
}
echo ConstantClass::constant."
";//相當于java中的ClassName.屬性名
$classname="ConstantClass";
// echo $classname::constant,"
";//php5.3以后才有這種,相當于java中的ClassName.屬性名,不過將ClassName動態(tài)化了,加上命名空間報錯
$class=new ConstantClass();
$class->showConstant();
echo $class::constant."
";//php5.3以后
?>
自動加載對象
很多開發(fā)者寫面向?qū)ο蟮膽贸绦驎r對每個類的定義建立一個 PHP 源文件。一個很大的煩惱是不得不在每個腳本(每個類一個文件)開頭寫一個長長的包含文件列表。
在 PHP 5 中,不再需要這樣了。可以定義一個 __autoload 函數(shù),它會在試圖使用尚未被定義的類時自動調(diào)用。通過調(diào)用此函數(shù),腳本引擎在 PHP 出錯失敗前有了最后一個機會加載所需的類。
注意: autoload前面是兩個下劃線
1)在__autoload函數(shù)中拋出的異常不能陪catch語句塊捕獲,會導致致命錯誤
2)如果使用php的CLI交互模式時,Autoloading不存在<?php
function __autoload($class_name){
//require_once語句在腳本執(zhí)行期間包含并運行指定文件。此行為和 require()語句完全相同,唯一區(qū)別是如果該文件中的代碼已經(jīng)被包含了,則不會再次包含
require_once $class_name . '.php';
}
$obj =new testAAA();
$obj2=new type();
?>
在testAAA.php文件中<?php
class testAAA{
function testAAA()
{
echo "加載了".get_class($this);
}
}
?>
在type.php文件中<?php
class type{
function type(){
echo "加載了".get_class($this);
}
}
?>
構造函數(shù)
void __construct(...)
PHP 5 允行開發(fā)者在一個類中定義一個方法作為構造函數(shù)。具有構造函數(shù)的類會在每次創(chuàng)建新對象時先調(diào)用此方法,所以非常適合在使用對象之前做一些初始化工作。
注意:如果子類中定義了構造函數(shù)則不會隱式調(diào)用其父類的構造函數(shù)。要執(zhí)行父類的構造函數(shù),需要在子類的構造函數(shù)中調(diào)用 parent::__construct()。<?php
class BaseClass{
function __construct(){
//如果是子類調(diào)用該方法,get_class()返回的是子類的名稱
//echo get_class($this)."初始化了
";
echo "BaseClass初始化了
";
}
}
class SubClass extends BaseClass{
function __construct(){
parent::__construct();//默認不調(diào)用父類的構造函數(shù),調(diào)用父類的構造函數(shù)方法
echo get_class($this)."初始化了
";//有命名空間的情況下打印出來的:Base\SubClass初始化了,無:SubClass初始化了
}
}
$obj=new BaseClass();
$obj=new SubClass();
class TreeClass{
function TreeClass(){//當有__construct方法時,這個不執(zhí)行的
echo get_class($this)."初始化了
";
}
// function __construct(){//沒有命名空間的時候,兩個不能同時出現(xiàn)
// echo "ac初始化了
";
// }
}
$obj=new TreeClass();
class fourClass{
function fourClass(){//定義了命名空間原始的
echo get_class($this)."初始化了
";
}
}
$obj=new fourClass();
?>
注意:為了實現(xiàn)向后兼容性,如果 PHP 5 在類中找不到 __construct()函數(shù),它就會嘗試尋找舊式的構造函數(shù),也就是和類同名的函數(shù)。因此唯一會產(chǎn)生兼容性問題的情況是:類中已有一個名為 __construct() 的方法,但它卻又不是構造函數(shù)。
析構函數(shù)
void __destruct ( void )
PHP 5 引入了析構函數(shù)的概念,這類似于其它面向?qū)ο蟮恼Z言,如 C++。析構函數(shù)會在到某個對象的所有引用都被刪除或者當對象被顯式銷毀時執(zhí)行。<?php
class MyDestructClass{
function __construct(){
print "MyDestructClass初始化了
";
$this->name="MyDestructClass";
}
function __destruct(){//全部解析完以后才執(zhí)行該方法
print "Destroying".$this->name."
";
}
}
$obj=new MyDestructClass();
?>
和構造函數(shù)一樣,父類的析構函數(shù)不會被引擎暗中調(diào)用。要執(zhí)行父類的析構函數(shù),必須在子類的析構函數(shù)體中顯式調(diào)用 parent::__destruct()。
析構函數(shù)即使在使用exit()終止腳本運行時也會被調(diào)用。在析構函數(shù)中 調(diào)用exit()將會中止其余關閉操作的運行。
訪問控制
對屬性或方法的訪問控制,是通過在前面添加關鍵字 public、protected 或 private 來實現(xiàn)的。由 public 所定義的類成員可以在任何地方被訪問;由 protected 所定義的類成員則可以被其所在類的子類和父類訪問(當然,該成員所在的類也可以訪問);而由 private 定義的類成員則只能被其所在類訪問。
對類成員的訪問控制
類成員都必須使用關鍵字public、protected 或 private 進行定義
注意:為了兼容性考慮,在 PHP 4 中使用 var 關鍵字對變量進行定義的方法在 PHP 5 中仍然有效(只是作為 public 關鍵字的一個別名)。在 PHP 5.1.3 之前的版本,該語法會產(chǎn)生一個 E_STRICT 警告。
對方法的訪問控制
類中的方法都必須使用關鍵字public、protected 或 private 進行定義。如果沒有設置這些關鍵字,則該方法會被設置成默認的 public。
對象繼承
繼承已為大家所熟知的一個程序設計特性,PHP 的對象模型也使用了繼承。繼承將會影響到類與類,對象與對象之間的關系。
比如,當擴展一個類,子類就會繼承父類的所有公有和保護方法。但是子類的方法會覆蓋父類的方法。
繼承對于功能的設計和抽象是非常有用的,而且對于類似的對象增加新功能就無須重新再寫這些公用的功能。
范圍解析操作符(::)
范圍解析操作符(也可稱作 Paamayim Nekudotayim)或者更簡單地說是一對冒號,可以用于訪問靜態(tài)成員、方法和常量,還可以用于覆蓋類中的成員和方法。
1)當在類的外部訪問這些靜態(tài)成員、方法和常量時,必須使用類的名字。
2)self 和 parent這兩個特殊的關鍵字是用于在類的內(nèi)部對成員或方法進行訪問的。
3)當一個子類覆蓋其父類中的方法時,PHP 不會再執(zhí)行父類中已被覆蓋的方法,直到子類中調(diào)用這些方法為止。這種機制也作用于 構造函數(shù)和析構函數(shù)、重載 及 魔術 函數(shù)。<?php
class MyClass
{
const CONST_VALUE = '常量值';
protected function myFunc() {
echo "MyClass::myFunc()
";
}
}
class OtherClass extends MyClass
{
// 覆蓋父類中的方法
public function myFunc()
{
// 但仍然可以調(diào)用已被覆蓋的方法
parent::myFunc();
echo "OtherClass::myFunc()
";
}
public static $my_Static="靜態(tài)值";
public static function doubleColon(){
echo parent::CONST_VALUE."
";
}
}
echo MyClass::CONST_VALUE,"
";
OtherClass::doubleColon();
$class = new OtherClass();
$class->myFunc();
?>
總結(jié)
以上是生活随笔為你收集整理的php 类学习,php的类学习(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 禁用应用中Android系统的导航栏(特
 - 下一篇: 小孩桌面便签隐藏了怎么恢复?