1. 程式人生 > >《高級Web後臺開發》復習

《高級Web後臺開發》復習

oca person 數據 後臺開發 num 小寫 target 單選題 value

《高級Web後臺開發》復習

一、單選題

1.如何聲明一個PHP的用戶自定義類?( B )

A.<?php B.<?php

class Class_name() { } class Class_name { }

?> ?>

C.<?php D.<?php

function Function_name { } function Function_name () { }

?> ?>

2.下面哪一項不是PHP中面向對象的機制?( D )

A.類 B.屬性、方法 C.單一繼承 D.多重繼承

3.如何讓一個對象實例調用自身的該對象的方法函數“mymethod”?( A )

A.$self=>mymethod(); B.$this->mymethod();

C.$current->mymethod(); D.$this::mymethod();

4.下面哪項描述是錯誤的?( A )

A.父類的構造函數與析構函數不會自動被調用

B.成員變量需要用public protected private修飾,在定義變量時不再需要var關鍵字

C.父類中定義的靜態成員,不可以在子類中直接調用

D.包含抽象方法的類必須為抽象類,抽象類不能被實例化

5.如果成員沒有聲明限定字符,屬性的默認值是( C )。

A.private B.protected C.public D.final

6.PHP中調用類文件中的$this表示( A )。

A.用本類生成的對象變量 B.本頁面

C.本方法 D.本變量

7.在PHP的面象對象中,類中定義的析構函數是在( C )調用的。

A.類創建時 B.創建對象時 C.刪除對象時 D.不自動調用

8.以下是一個類的聲明,其中有兩個成員屬性,對成員屬性正確的賦值方式是( B )。

<?php

class Demo {

private $one;

static $two;

function setOne($value) {

$this->one=$value;

}

}

$demo=new Demo();

?>

A.$demo->one="abc"; B.Demo::$two="abc";

C.Demo::setOne("abc"); D.$demo->two="abc";

9.在PHP 5的類的定義中,無法使用3P修飾的內容是( D )。

A.屬性 B.靜態方法 C.常量 D.方法

10.在PHP 5的類的定義中,如果方法M1能夠調用方法M2,但M2不能調用M1,那麽M1和M2應該符合( A )。

A.M2是靜態方法而M1不是 B.M1是靜態方法而M2不是

C.M1和M2都是靜態方法 D.M1和M2都不是靜態方法

11.以下四條接口與抽象類的對比分析,哪條是錯誤的?( B )

A.接口和抽象類都可以只聲明方法而不實現它

B.抽象類可以定義類常量,而接口不能

C.抽象類可以實現具體的方法,而接口不能

D.抽象類可以聲明屬性,而接口不能

12.要實現PHP 5在面向對象編程方面最令人激動的自動加載功能,我們可以( A )。

A.定義函數名為__autoload()的自動加載函數

B.通過php.ini或者ini_set()設置自動加載目錄

C.在編譯PHP 5時加上默認未激活的模塊

D.使用spl_autoload_register()函數和相關函數來指定自動加載函數

13.針對PHP 5中特有的魔法方法(Magic Methods),下列四句中哪句是錯誤的?( A )

A.__get和__set方法用於設置並不存在的類實例的屬性成員

B.__call和__invoke方法用於調用並不存在的類的方法成員

C.__sleep和__wakeup方法用於在序列化類實例時處理其中的外部資源和冗余數據

D.通過__get方法,我們可以實現類的只讀屬性,而__set方法可以實現只寫屬性

14.如果你想要自動加載類,下面哪種函數聲明是正確的?( )

A.function autoload($class_name) B.function __autoload($class_name, $file)

C.function __autoload($class_name) D.function _autoload($class_name)

E.function autoload($class_name, $file)

15.以下哪段代碼能正常執行?( D )

A.abstract class boo{ B.abstract class boo{

abstract function func(); function func();

} }

class coo extends boo{ class coo extends boo{

abstract function func(){} function func(){}

} }

$coo = new coo(); $coo = new coo();

C.class boo{ D.abstract class boo{

abstract function func(); abstract function func();

} }

class coo extends boo{ class coo extends boo{

function func(){} function func(){}

} }

$coo = new coo(); $coo = new coo();

16.下面哪些說法是錯誤的?( )

A.如果一個類的成員前面有訪問修飾符private,那麽這些成員不能被繼承,並且在類的外部可見。但如果類的成員被指定為protect或public,則可以被繼承,在類的外部也是可見的

B.PHP 5中,final關鍵字可以禁止繼承和重載

C.PHP 5中,析構函數的名稱是__destruct(),並且不能有任何參數

D.繼承接口的類必須實現接口中聲明的所有方法,在PHP中,如果繼承接口的類沒有實現接口中指定的方法,將會產生一個致命的錯誤

17.執行以下代碼,輸出結果是( B )。

<?php

abstract class a{

function __construct(){

echo “a”;

}

}

$a=new a();

?>

A.a B.一個錯誤警告 C.一個致命性的報錯 D.無輸出

18.執行以下代碼,輸入結果是( D )。

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

D.echo class b something

19.哪種OOP設置模式能讓類在整個腳本裏只實例化一次?( D )

A.MVC B.代理模式 C.抽象工廠模式 D.單件模式

20.借助繼承,我們可以創建其他類的派生類。那麽在PHP中,子類最多可以繼承幾個父類?( A )

A.1個 B.2個 C.取決於系統資源 D.想要幾個有幾個

二、簡答題

1.如何訪問和設置一個類的屬性?

<?php

class A{

public $name = “A”;

}

$a = new A();

n=a->name;

print_r($n);

2.PHP中有哪些常用的魔術方法?說明其用法。

3.簡述public,protected,private,static,const和final的區別和調用方式。

1.public(公共的)

表明該數據成員、成員函數是對所有用戶開放的,所有用戶都可以直接進行調用

2.protected(受保護的)

是受訪問權限顯示的,不同包中的非子類是不能訪問的 default 是受訪問權限顯示的,不同包中的子類不能訪問

3.private(私有的)

必須要同一類才能訪問 static 一個類的成員被聲明為static時,他屬於一個類,可以通過類名被訪問,不需創建實例用

4.static(靜態)

static屬性定義的方法為類方法,可以通過類名來調用,不需創建實例 final 用final修飾的變量為常值變量,一旦初始化,不能更改通常final與static一起使用指定一個類常量用final修飾的方法為最終方法,不能再被子類重載

5.final

使用對象:類、方法、字段、變量

介紹:被定義成final的類不允許出現子類,不能被覆蓋(不應用於動態查詢),字段值不允許被修改。

6.const

用於類成員變量的定義,一經定義,不可修改. const只能接受靜態的標量

4.面向對象中接口和抽象類的區別及應用場景?

1.有抽象方法的類叫做抽象類,抽象類中不一定有抽象方法,抽象方法必須使用abstract關鍵字定義。

2.接口中全部是抽象方法,方法不用使用abstract定義。

3.當多個同類的類要設計一個上層,通常設計為抽象類,當多個異構的類要設計一個上層,通常設計為接口。

5.serialize() /unserialize()函數的作用是什麽?

1.serialize()

這個函數作用就是序列化數據,返回一個可存儲的字符串,該函數有利於存儲或傳遞PHP的值,同時不丟失其類型和結構

2. unserialize()

這個函數作用就是反序列化數據----從已存儲的表示中創建 PHP 的值

6. 什麽是面向對象?主要特征是什麽?

1.什麽是面向對象

面向對象編程,也就是我們常說的OOP,其實是面向對象的一部分。面向對象一共有3個部分:面向對象分析(OOA)、面向對象設計(OOD)、面向對象編程(OOP)。我們現在將要學習的就是面向對象的編程,而面向對象編程中兩個首要了解的也是很重要的概念就是類和對象。

2.主要特征

(1).封裝性

簡單形象的解釋就是,把功能放在一個盒子裏,要用到這個功能的時候,打開盒子,取出就可以使用。

(2).繼承性

子類自動繼承一個或多個父類中的屬性與方法,並可以重寫或者添加新的屬性或方法。

這個特性簡化了類和對象的創建,提高了代碼的可重用性。

(3).多態性

指的是一個類可以創建多個對象,獲取不同的結果。

7.類中如何定義常量?在類中、類外分別是如何調用常量的?

1.如何定義常量

有兩種定義方式:

用define()函數來定義常量

define(‘STATUS‘, 3); // 如果第三個參數設置為true,則大小寫不敏感

echo STATUS;

用const關鍵字來定義常量

const NAME = 4;

echo NAME;

2. 在類中、類外分別是如何調用常量的?

<?php class Foo{

const con_var="常量值不能被改";

public function method_a(){

echo (self::con_var); // 內部調用

}

}

echo(Foo::con_var); //外部調用 註修飾符為

public $myFoo=new Foo();

echo ($myFoo->method_a());

?>

三、編程題

1. 請簡單寫一個類,實例化這個類,並寫出調用該類的屬性和方法的語句。

<?php

class NewClass {

public function hello(){

echo "hello world";

}

}

$newclass = new NewClass();

$newclass -> hello();

?>

2. 定義一個Person類,成員屬性有:姓名、性別、年齡,成員方法有:構造方法、say()方法、run()方法、析構方法。再定義一個子類Student繼承Person類,要求在子類的say()方法中完成父類方法的調用。

<?php

class Person { //聲明一個人類Person,其中包含三個成員屬性和兩個成員方法

//下面是聲明人的成員屬性

var $name; //第一個成員屬性$name定義人的名子

var $sex; //第二個成員屬性$sex定義人的性別

var $age; //第三個成員屬性$age定義人的年齡

//聲明一個構造方法,將來創建對象時,為對象的成員屬性賦予初值

function __construct($name, $sex, $age) {

$this->name = $name; //在創建對象時,使用傳入的參數$name為成員屬性$this->name賦初值

$this->sex = $sex; //在創建對象時,使用傳入的參數$sex為成員屬性$this->sex賦初值

$this->age = $age; //在創建對象時,使用傳入的參數$age為成員屬性$this->age賦初值

}

//下面是聲明人的成員方法

function say(){ //在類中聲明說話的方法,使用$this訪問自已對象內部的成員屬性

return "我的姓名是:".$this->name.", 性別:".$this->sex.", 我的年齡是:".$this->age."。<br>";

}

function run() { //在類中聲明另一個方法

return $this->name."在走路<br>"; //使用$this訪問本對象中的$name屬性

}

function __destruct() {

return "再見".$this->name."<br>";

}

}

class Student extends Person{

function say1(){

return $this->say()."繼承Person類";

}

}

// 下面三行通過new關鍵字實例化person類的三個實例對象

$person1=new Person("張三", "男", 20);

// echo $person1->run();

$student = new Student("John","male","20");

echo $student->say1();

?>

3.用面向對象來實現A類同時繼承B類和C類。

<?php

interface testA{

function echostr();

}

interface testB extends testA{

function dancing($name);

}

class testC implements testB{

function echostr(){

echo "接口繼承,要實現所有相關抽象方法!";

echo "<br>";

}

function dancing($name){

echo $name."正在跳舞!";

}

}

$demo=new testC();

$demo->echostr();

$demo->dancing("模特");

4.通過static關鍵字限制一個類最多只能創建出一個實例化對象(提示:單態設計模式)。

5. 定義一個汽車(Car)類和一個公交車(Bus)類,要求如下。

(1)汽車(Car)類內有兩個私有屬性:型號(model)、顏色(color) ,成員方法包含構造方法,__toString( )方法,還有__set( ) __get( )方法。其中,__toString( )方法負責輸出“這是一輛汽車,型號為XXX,顏色為XXX。”

(2)公交車(Bus)類繼承汽車(Car)類,內有一個私有屬性:共載人數(number),並重寫父類的構造方法和__toString( )方法。其中,__toString( )方法負責輸出“這是一輛公交車,型號為XXX,顏色為XXX,載客人數為XX人。”

6. 編寫一個PHP程序,保存為Rectangle.php要求如下:

(1)創建一個矩形(Rectangle)類,該類的成員屬性有:寬(width)、高(height)、顏色(color)、周長(perimeter)、面積(area),屬性均使用private關鍵字封裝在類內部;成員方法有:構造方法,求周長方法calcPerimeter(),求面積方法calcArea(),say()方法。其中,構造方法實現在創建對象的時候對寬、高、顏色進行初始化,say()方法實現打印出矩形對象的所有成員信息。

(2) 用Rectangle類創建兩個實例$rec1和$rec2,分別為寬4高3紅色,寬10高5藍色,並調用這兩個對象的成員方法,計算並打印出矩形對象的寬、高、顏色、周長、面積。

7.使用面向對象中封裝、繼承、多態三大特性及接口的應用,實現在同一個電腦主板的PCI插槽中,安裝聲卡、網卡和顯示卡等符合PCI規範的不同功能的PCI設備。當插入不同的PCI設備卡時,就開啟被插入卡的功能(提示:聲明一個PCI接口、聲卡類、網卡類、顯示卡類、主板類、安裝工人類,其中每個PCI設備都要實現PCI接口的規範)。

8. 請用 PHP編寫一個Mysql類,實現在每次對數據庫連接的訪問中都只能獲得唯一的一個數據庫連接,寫出主要邏輯代碼即可。(假設數據庫連接信息為Host:locahost; 數據庫用戶名:root, 數據庫密碼:123)

文檔下載:《高級Web後臺開發》復習

《高級Web後臺開發》復習