PHP面向?qū)ο?/h1>

1 寫出 php 的 public乎婿、protected儒洛、private 三種訪問控制模式的區(qū)別(新浪網(wǎng)技術(shù)部)

public:公有粹舵,任何地方都可以訪問
protected:繼承属百,只能在本類或子類中訪問茬末,在其它地方不允許訪問
private:私有,只能在本類中訪問慢叨,在其他地方不允許訪問

相關(guān)題目:請寫出 PHP5 權(quán)限控制修飾符

private protected public

2 設(shè)計模式考察:請用單態(tài)設(shè)計模式方法設(shè)計類滿足如下需求:

請用 PHP5 代碼編寫類實現(xiàn)在每次對數(shù)據(jù)庫連接的訪問中都只能獲得唯一的一個數(shù)據(jù)庫連接纽匙,具體連接數(shù)據(jù)庫的詳細(xì)代碼忽略,請寫出主要邏輯代碼(新浪網(wǎng)技術(shù)部)

<?php
class Mysql
{
private static $instance = null;
private $conn;

    // 構(gòu)造方法插爹,設(shè)置為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();

?>
3 寫出下列程序的輸出結(jié)果(新浪網(wǎng)技術(shù)部)

<?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();

?>
輸出結(jié)果 10

4 PHP5 中魔術(shù)方法函數(shù)有哪幾個请梢,請舉例說明各自的用法 (騰訊 PHP 工程師筆試題)

__sleep serialize 之前被調(diào)用
__wakeup unserialize 時被調(diào)用
__toString 打印一個對象時被調(diào)用
__set_state 調(diào)用 var_export 時被調(diào)用赠尾,用__set_state的返回值作為 var_export 的返回值
__construct 構(gòu)造函數(shù)力穗,實例化對象時被調(diào)用
__destruct 析構(gòu)函數(shù),當(dāng)對象銷毀時被調(diào)用
__call 對象調(diào)用某個方法气嫁,若存在該方法当窗,則直接調(diào)用,若不存在寸宵,則調(diào)用__call 函數(shù)
__get 讀取一個對象屬性時崖面,若屬性存在,則直接返回梯影,若不存在巫员,則調(diào)用__get 函數(shù)
__set 設(shè)置一個對象的屬性時,若屬性存在甲棍,則直接賦值简识,若不存在,則調(diào)用__set 函數(shù)
__isset 檢測一個對象的屬性是否存在時被調(diào)用
__unset unset 一個對象的屬性時被調(diào)用
__clone 克隆對象時被調(diào)用
__autoload 實例化一個對象時感猛,如果對應(yīng)的類不存在七扰,則該方法被調(diào)用

相關(guān)題目:請寫出 php5 的構(gòu)造函數(shù)和析構(gòu)函數(shù)

構(gòu)造函數(shù):__construct
析構(gòu)函數(shù):__destruct

5 如何使用下面的類,并解釋下面什么意思?

<?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 加密

6 How would you declare a class named “myclass” with no methods or properties?(Yahoo)

class myclass{};

相關(guān)題目:如何聲明一個名為“myclass”的沒有方法和屬性的類?

7 How would you create an object, which is an instance of “myclass”? (Yahoo)

$obj= new myclass();

相關(guān)題目:如何實例化一個名為“myclass”的對象陪白?

8 How do you access and set properties of a class from within the class?(Yahoo)

使用語句:$this->propertyName颈走,例如:

<?php
class mycalss{
private $propertyName;
public function __construct()
{
$this->propertyName = "value";
}
}
?>
9 The code below ___________ because ____________.(騰訊)

<?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

10 類的屬性可以序列化后保存到 session 中,從而以后可以恢復(fù)整個類咱士,這要用到的函數(shù)是____立由。
serialize() 和 unserialize()

11 在 PHP 中,如果派生類與父類有相同名字的函數(shù)序厉,則派生類的函數(shù)會替換父類的函數(shù)拆吆,程序結(jié)果為

<?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

12 接口和抽象類的區(qū)別是什么?

抽象類是一種不能被實例化的類脂矫,只能作為其他類的父類來使用枣耀。抽象類是通過關(guān)鍵字abstract 來聲明的。
抽象類與普通類相似庭再,都包含成員變量和成員方法捞奕,兩者的區(qū)別在于,抽象類中至少要包含一個抽象方法拄轻,抽象方法沒有方法體颅围,該方法天生就是要被子類重寫的。
抽象方法的格式為:abstract function abstractMethod();

接口是通過 interface 關(guān)鍵字來聲明的恨搓,接口中的成員常量和方法都是 public 的院促,方法可以不寫關(guān)鍵字 public筏养,接口中的方法也是沒有方法體。接口中的方法也天生就是要被子類實現(xiàn)的常拓。
抽象類和接口實現(xiàn)的功能十分相似渐溶,最大的不同是接口能實現(xiàn)多繼承。在應(yīng)用中選擇抽象類還是接口要看具體實現(xiàn)弄抬。
子類繼承抽象類使用 extends茎辐,子類實現(xiàn)接口使用 implements。

13 類中如何定義常量掂恕、如何類中調(diào)用常量拖陆、如何在類外調(diào)用常量。

類中的常量也就是成員常量懊亡,常量就是不會改變的量依啰,是一個恒值。定義常量使用關(guān)鍵字 const店枣,例如:const PI = 3.1415326;
無論是類內(nèi)還是類外速警,常量的訪問和變量是不一樣的,常量不需要實例化對象艰争,訪問常量的格式都是類名加作用域操作符號(雙冒號)來調(diào)用坏瞄,即:類名:: 類常量名。

14 autoload()函數(shù)是如何運作的甩卓?

使用這個魔術(shù)函數(shù)的基本條件是類文件的文件名要和類的名字保持一致鸠匀。
當(dāng)程序執(zhí)行到實例化某個類的時候,如果在實例化前沒有引入這個類文件逾柿,那么就自動執(zhí)行__autoload()函數(shù)缀棍。

這個函數(shù)會根據(jù)實例化的類的名稱來查找這個類文件的路徑,當(dāng)判斷這個類文件路徑下確實存在這個類文件后就執(zhí)行 include 或者 require 來載入該類机错,然后程序繼續(xù)執(zhí)行爬范,如果這個路徑下不存在該文件時就提示錯誤。

15 哪種OOP設(shè)置模式能讓類在整個腳本里只實例化一次弱匪?(奇矩互動)

A. MVC
B. 代理模式
C. 狀態(tài)模式
D. 抽象工廠模式
E. 單件模式
答案:E

16 借助繼承青瀑,我們可以創(chuàng)建其他類的派生類。在PHP中萧诫,子類最多可以繼承幾個父類斥难?(奇矩互動)

A. 1個
B. 2個
C. 取決于系統(tǒng)資源
D. 3個
E. 想要幾個有幾個
答案:A

17 執(zhí)行以下代碼,輸出結(jié)果是(奇矩互動)

<?php
abstract class a{
function __construct()
{
echo "a";
}
}

$a = new a();

?>
A. a
B. 一個錯誤警告
C. 一個致命性的報錯
答案:C 因為類a是抽象類帘饶,不能被實例化

18 執(zhí)行以下代碼哑诊,輸出結(jié)果是

<?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,兩個類都定義了構(gòu)造函數(shù)及刻,由于二者名字相同镀裤,所以子類中的構(gòu)造函數(shù)覆蓋了父類的構(gòu)造函數(shù)竞阐,要想子類對象實例化時也執(zhí)行父類的構(gòu)造函數(shù),需要在子類構(gòu)造函數(shù)中使用 parent::__construct()來顯示調(diào)用父類構(gòu)造函數(shù)暑劝。

19 請定義一個名為MyClass的類骆莹,這個類只有一個靜態(tài)方法justDoIt。(卓望)

<?php
class MyClass{
public static function justDoIt(){

}

}
?>
20 只有該類才能訪問該類的私有變量嗎铃岔?(卓望)

是的

21 寫出你知道的幾種設(shè)計模式汪疮,并用php代碼實現(xiàn)其中一種峭火。(卓望)

單例模式毁习,工廠模式
單例模式 實現(xiàn)代碼 見 第二題

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者

  • 序言:七十年代末,一起剝皮案震驚了整個濱河市卖丸,隨后出現(xiàn)的幾起案子纺且,更是在濱河造成了極大的恐慌,老刑警劉巖稍浆,帶你破解...
    沈念sama閱讀 222,946評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件载碌,死亡現(xiàn)場離奇詭異,居然都是意外死亡衅枫,警方通過查閱死者的電腦和手機(jī)嫁艇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弦撩,“玉大人步咪,你說我怎么就攤上這事∫媛ィ” “怎么了猾漫?”我有些...
    開封第一講書人閱讀 169,716評論 0 364
  • 文/不壞的土叔 我叫張陵,是天一觀的道長感凤。 經(jīng)常有香客問我悯周,道長,這世上最難降的妖魔是什么陪竿? 我笑而不...
    開封第一講書人閱讀 60,222評論 1 300
  • 正文 為了忘掉前任禽翼,我火速辦了婚禮,結(jié)果婚禮上族跛,老公的妹妹穿的比我還像新娘闰挡。我一直安慰自己,他們只是感情好庸蔼,可當(dāng)我...
    茶點故事閱讀 69,223評論 6 398
  • 文/花漫 我一把揭開白布解总。 她就那樣靜靜地躺著,像睡著了一般姐仅。 火紅的嫁衣襯著肌膚如雪花枫。 梳的紋絲不亂的頭發(fā)上刻盐,一...
    開封第一講書人閱讀 52,807評論 1 314
  • 那天,我揣著相機(jī)與錄音劳翰,去河邊找鬼敦锌。 笑死,一個胖子當(dāng)著我的面吹牛佳簸,可吹牛的內(nèi)容都是我干的乙墙。 我是一名探鬼主播,決...
    沈念sama閱讀 41,235評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼生均,長吁一口氣:“原來是場噩夢啊……” “哼听想!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起马胧,我...
    開封第一講書人閱讀 40,189評論 0 277
  • 序言:老撾萬榮一對情侶失蹤汉买,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后佩脊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛙粘,經(jīng)...
    沈念sama閱讀 46,712評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,775評論 3 343
  • 正文 我和宋清朗相戀三年威彰,在試婚紗的時候發(fā)現(xiàn)自己被綠了出牧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,926評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡歇盼,死狀恐怖舔痕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情旺遮,我是刑警寧澤赵讯,帶...
    沈念sama閱讀 36,580評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站耿眉,受9級特大地震影響边翼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鸣剪,卻給世界環(huán)境...
    茶點故事閱讀 42,259評論 3 336
  • 文/蒙蒙 一组底、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧筐骇,春花似錦债鸡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至告唆,卻和暖如春棺弊,著一層夾襖步出監(jiān)牢的瞬間晶密,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評論 1 274
  • 我被黑心中介騙來泰國打工模她, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留稻艰,地道東北人。 一個月前我還...
    沈念sama閱讀 49,368評論 3 379
  • 正文 我出身青樓侈净,卻偏偏與公主長得像尊勿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子畜侦,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,930評論 2 361

推薦閱讀更多精彩內(nèi)容