public:公有,任何地方均可以訪問
protected:繼承,只能在本類或子類中訪問,在其它地方不容許訪問
private:私有,只能在本類中訪問,在其餘地方不容許訪問php
private protected publicmysql
請用 PHP5 代碼編寫類實如今每次對數據庫鏈接的訪問中都只能得到惟一的一個數據庫鏈接,具體鏈接數據庫的詳細代碼忽略,請寫出主要邏輯代碼(新浪網技術部)sql
<?php class Mysql { private static $instance = null; private $conn; // 構造方法,設置爲private,不容許經過new得到對象實例 private function __construct(argument) { $conn = mysql_connect("localhost","root","root"); } // 獲取實例方法 public function getInstance() { if (!self::$instance instanceof self) { self::$instance = new self; } return self::$instance; } // 禁止克隆 private function __clone(){} } // 得到對象 $db = Mysql::getInstance(); ?>
<?php class a { protected $c; public function a() { $this->c = 10; } } class b extends a { public function print_data() { return $this->c; } } $b = new b(); echo $b->print_data(); ?>
輸出結果 10數據庫
__sleep
serialize 以前被調用__wakeup
unserialize 時被調用__toString
打印一個對象時被調用__set_state
調用 var_export 時被調用,用__set_state
的返回值做爲 var_export 的返回值__construct
構造函數,實例化對象時被調用__destruct
析構函數,當對象銷燬時被調用__call
對象調用某個方法,若存在該方法,則直接調用,若不存在,則調用__call
函數__get
讀取一個對象屬性時,若屬性存在,則直接返回,若不存在,則調用__get
函數__set
設置一個對象的屬性時,若屬性存在,則直接賦值,若不存在,則調用__set
函數__isset
檢測一個對象的屬性是否存在時被調用__unset
unset 一個對象的屬性時被調用__clone
克隆對象時被調用__autoload
實例化一個對象時,若是對應的類不存在,則該方法被調用django
構造函數:__construct
析構函數:__destruct
設計模式
<?php class test{ function Get_test($num){ $num = md5(md5($num)."En"); return $num; } } $testObject = new test(); $encryption = $testObject->Get_test("itcast"); echo $encryption; ?>
雙重 md5 加密session
class myclass{};
函數
$obj= new myclass();
oop
使用語句:$this->propertyName,例如:ui
<?php class mycalss{ private $propertyName; public function __construct() { $this->propertyName = "value"; } } ?>
<?php class Foo{ ?> <?php function bar(){ print "bar"; } } ?>
A. will work, class definitions can be split up into multiple PHP blocks.
B. will not work, class definitions must be in a single PHP block.
C. will not work, class definitions must be in a single file but can be in multiple PHP blocks.
D. will work, class definitions can be split up into multiple files and multiple PHP blocks.
答案: B
<?php class A{ function disName(){ echo "Picachu"; } } class B extends A{ var $tmp; function disName(){ echo "Doraemon"; } } $cartoon = New B; $cartoon->disName(); ?>
A. tmp
B. Picachu
C. disName
D. Doraemon
E. 無輸出
答案:D
抽象類是一種不能被實例化的類,只能做爲其餘類的父類來使用。抽象類是經過關鍵字abstract 來聲明的。
抽象類與普通類類似,都包含成員變量和成員方法,二者的區別在於,抽象類中至少要包含一個抽象方法,抽象方法沒有方法體,該方法天生就是要被子類重寫的。
抽象方法的格式爲:abstract function abstractMethod();
接口是經過 interface 關鍵字來聲明的,接口中的成員常量和方法都是 public 的,方法能夠不寫關鍵字 public,接口中的方法也是沒有方法體。接口中的方法也天生就是要被子類實現的。
抽象類和接口實現的功能十分類似,最大的不一樣是接口能實現多繼承。在應用中選擇抽象類仍是接口要看具體實現。
子類繼承抽象類使用 extends,子類實現接口使用 implements。
類中的常量也就是成員常量,常量就是不會改變的量,是一個恆值。定義常量使用關鍵字 const,例如:const PI = 3.1415326;
不管是類內仍是類外,常量的訪問和變量是不同的,常量不須要實例化對象,訪問常量的格式都是類名加做用域操做符號(雙冒號)來調用,即:類名:: 類常量名
。
使用這個魔術函數的基本條件是類文件的文件名要和類的名字保持一致。
當程序執行到實例化某個類的時候,若是在實例化前沒有引入這個類文件,那麼就自動執行__autoload()
函數。
這個函數會根據實例化的類的名稱來查找這個類文件的路徑,當判斷這個類文件路徑下確實存在這個類文件後就執行 include 或者 require 來載入該類,而後程序繼續執行,若是這個路徑下不存在該文件時就提示錯誤。
A. MVC
B. 代理模式
C. 狀態模式
D. 抽象工廠模式
E. 單件模式
答案:E
A. 1個
B. 2個
C. 取決於系統資源
D. 3個
E. 想要幾個有幾個
答案:A
<?php abstract class a{ function __construct() { echo "a"; } } $a = new a(); ?>
A. a
B. 一個錯誤警告
C. 一個致命性的報錯
答案:C 由於類a是抽象類,不能被實例化
<?php class a{ function __construct(){ echo "echo class a something"; } } class b extends a{ function __construct(){ echo "echo class b something"; } } $a = new b(); ?>
A. echo class a something echo class b something
B. echo class b something echo class a something
C. echo class a something
D. echo class b something
答案:D
類 b 繼承自類 a,兩個類都定義了構造函數,因爲兩者名字相同,因此子類中的構造函數覆蓋了父類的構造函數,要想子類對象實例化時也執行父類的構造函數,須要在子類構造函數中使用 parent::__construct()
來顯示調用父類構造函數。
<?php class MyClass{ public static function justDoIt(){ } } ?>
是的
單例模式,工廠模式單例模式 實現代碼 見 第二題