[PHP]php基础练习题学习随笔
1、解釋一下PHP中常量、變量、可變變量并舉例說明;超級全局變量有哪些?
- 常量是單個值的標識符(名稱),通過define()設置,在腳本中無法改變該值,常量自動全局。
<?php #對大小寫不敏感為true,默認為false define("GREETING", "Welcome to W3School.com.cn!", true); echo greeting; ?>
- 變量是存儲信息的容器,以$符號開頭,首次賦值時被創建,變量名對大小寫敏感;
<?php $txt="Hello world!"; $x=5; $y=10.5; ?>
? ?變量的三種作用域:
-
- local
- global (要在函數內部訪問需在變量前使用global關鍵詞聲明,或使用$GLOBALS[index]數組直接調用)
- static (函數結束時不刪除該局部變量并保留最后一次調用后的值)
-
可變變量:用一個變量的值作為另一個變量的名稱 (http://www.php.net/manual/zh/language.variables.variable.php)
<?php $a = "hello"; $$a = "world!"; echo "$a $$a"; //或者${$a} echo "$a $hello"; ?>
-
超全局變量:在一個腳本的全部作用域中始終可用的內置變量
- $GLOBALS
- $_SERVER
- $_REQUEST
- $_POST
- $_GET
- $_FILES
- $_ENV
- $_COOKIE
- $_SESSION
?2、字符串連接操作符、三元操作符、錯誤抑制操作符、執行操作符、類型操作符是什么,舉例說明用法
- 字符串連接操作符 "." 和 ".="
<?php $a = "Hello"; $b = $a . " world!"; echo $b; // 輸出 Hello world!$x="Hello"; $x .= " world!"; echo $x; // 輸出 Hello world! ?>
- 三元操作符 " ? : "
$c=($a>$b)?$a:$b
- 錯誤抑制操作符"@" :屏蔽錯誤輸出。?(博文:《深入理解PHP原理之錯誤抑制與內嵌HTML》)
$a?=?@(50/0);?
- 執行操作符"` `" : 實現服務器命令行指令。
$out = `ls -l`;
- 類型操作符"instanceof" :檢查三件事情:實例是否某個特定的類型,實例是否從某個特定的類型繼承,實例或者他的任何祖先類是否實現了特定的接口。
$manager = new Employee(); … if ($manager instanceof Employee) echo "Yes";
3、”===“是什么?試舉一個”==“是真但”===“是假的例子。
$x === $y 的意思是如果 $x 等于 $y,且它們類型相同,則返回 true。
$x=100; $y="100"; var_dump($x == $y); // 因為值相等,返回 true var_dump($x === $y); // 因為類型不相等,返回 false
4、解釋一下isset()、unset()、empty()
- isset():判斷變量是否已存在(配置)
- unset() :把變量刪除(釋放)掉
- empty() :判斷變量是否為空
- is_null() :判斷變量是否為NULL
5、PHP的面向對象的特點?什么是接口?implements和extend的區別? (PHP 面向對象教程)
class Person {//下面是人的成員屬性var $name; //人的名字var $sex; //人的性別var $age; //人的年齡//下面是人的成員方法function say() //這個人可以說話的方法 {echo"這個人在說話";}function run() //這個人可以走路的方法 {echo"這個人在走路";} } $p1=new Person(); $p2=new Person();
要實現一個接口,使用 implements 操作符。類中必須實現接口中定義的所有方法,否則會報一個致命錯誤。類可以實現多個接口,用逗號來分隔多個接口的名稱。 ??
implements 是實現多個接口,接口的方法一般為空,接口的這些方法必須重寫;extends 是繼承某個類,繼承后可以使用父類的方法,也可以重寫父類的方法。6、foo()和@foo()之間有什么區別?
@foo()可以屏蔽錯誤輸出。
7、解釋一下require()、require_once()、include()、include_once()的用法- include():包含沒有文件時會報錯,產生警告,但程序繼續運行;
- require():包含沒有文件時會報錯,導致致命錯誤,程序停止運行;
- include_once()和require_once()用法同上。但是它們都會首先檢查所要包含的文件是否已載入,如果已經載入了則不會重復載入。
8、PHP5中魔術方法函數有哪幾個,舉例說明各自用法 (15個魔術方法的總結?)
- __autoload() 類文件自動加載函數
- __construct() 構造函數、__destruct() ?析構函數
- __call() 當所調用的成員方法不存在(或者沒有權限)時調用,用于對錯誤后做一些操作或者提示信息
- __clone()?該函數在對象克隆時自動調用,其作用是對克隆的副本做一些初始化操作
- __get() 當所對象所調用的成員屬性未聲明或者級別為private或者protected等時,我們可以在這個函數里進行自己的一些操作
- __set() 當所對未聲明或者級別為private或者protected等進行賦值時調用此函數,我們可以在這個函數里進行自己的一些操作
- __isset() 當對一個未聲明或者訪問級別受限的成員屬性調用isset函數時調用此函數,共用戶做一些操作
- __unset() 當對一個未聲明或者訪問級別受限的成員屬性調用unset函數時調用此函數,共用戶做一些操作
- __toString() 在將對象引用作為字符串操作時自動調用,返回一個字符串
- __sleep() 是在序列化時自動調用的,序列化這里可以理解成將信息寫如文件中更長久保存
- __wakeup() 該魔術方法在反序列化的時候自動調用,為反序列化生成的對象做一些初始化操作
- __set_state() 當調用var_export()時,這個靜態方法會被調用(自PHP 5.1.0起有效)。本方法的唯一參數是一個數組,其中包含按array(’property’ => value, …)格式排列的類屬性。
- __invoke()?當嘗試以調用函數的方式調用一個對象時,__invoke 方法會被自動調用。
- __callStatic()?它的工作方式類似于 __call() 魔術方法,__callStatic() 是為了處理靜態方法調用
9、數組的創建方式有哪些?舉例說明
- 使用array():$數組名=array(值,.......);
- 使用compact()函數可以將一個或多個變量轉換為數組
<?php $firstname = "Peter"; $lastname = "Griffin"; $age = "38"; $result = compact("firstname", "lastname", "age"); print_r($result); ?>
- 使用array_combine()函數將兩個數組合并成一個新數組,其中的一個數組是鍵名,另一個數組的值為鍵值。
- 使用range()函數創建數組:$number = range(0,5); or 指定步長:$number = range(0,50,10);
- 使用array_fill()函數:用給定的值類填充數組。 ?array_fill(start,number,value)
10、數組的遍歷方式有哪些?舉例說明
- 使用for語句循環遍歷數組: ??for ($i= 0;$i< count($arr); $i++)
- 使用foreach語句遍歷數組: ?
foreach($arrays as $value)
foreach($arrays as $key=>$value)
- 聯合使用list()、each()和while循環遍歷數組。?
while(list($key,$val)= each($colors)) //list()用一步操作給一組變量進行賦值,each()返回數組中當前元素的鍵/值對并向后移動數組指針
11、php關聯數組按照鍵、值正向排序:array('c'=>3, 'a'=>4, 'b'=>2, 'e'=>5)
$arr = array('c'=>3, 'a'=>4, 'b'=>2, 'e'=>5) ksort($arr); //正向按鍵排序 asort($arr); //正向按值排序 rksort($arr);//反向按鍵排序 rasort($arr);//反向按值排序
12、對一個含有重復值的數組去重:array('a'=>1, 'b'=>2, 'c'=>3, 'd'=>4, 'a'=>1, 'b'=>3, 'd'=>4)
$arr = array('a'=>1, 'b'=>2, 'c'=>3, 'd'=>4, 'a'=>1, 'b'=>3, 'd'=>4);
$result = array_unique($arr); //只保留重復值的第一個鍵
13、sort()、asort()和ksort()有什么區別?分別在什么情況下使用?
- sort() 只依據值從小到大排序,鍵值不參與排序
- asort() 依據值排序,鍵值參與排序
- ksort() 依據鍵值排序,值參與排序
14、請說明php中傳值與傳引用的區別。什么時候傳值什么時候傳引用?
按值傳遞:函數范圍內對值的任何改變在函數外部都會被忽略
按引用傳遞:函數范圍內對值的任何改變在函數外部也能反映出這些修改
15、如何訪問和設置一個類的屬性?
$object = new myclass();
$newstr = $object->test;
$object->test = "info";
16、寫出php5權限控制修飾符
public private protected
17、列舉php數據類型
整型(integer)、浮點型(float)、字符串型(string)和布爾型(Boolean)四種標量類型,數組(array)和對象(object)兩種合成類型,空值(null)和資源(resource)兩種特殊類型。
18、如何修改SESSION的生存時間
setcookie(session_name(), session_id(), time() + 86400, "/");?
or
<?php $life_time = 24*3600; Session_set_cookie_params($life_time); Session_start(); ?>
19、簡要說說PHP框架
?
20、一個網頁地址如 http://www.phpres.com/index.html,如何得到內容?
$data = file_get_contents('http://www.phpres.com/index.html') ;
21、簡述如何得到當前執行腳本路徑,包括所得到參數。
echo "http://".$_SERVER ['HTTP_HOST'].$_SERVER['PHP_SELF'];
22、寫出數據類型int char varchar datetime text的意思,varchar和char有什么區別?
int是數字類型,char固定長度字符串,varchar可變長度字符串,datetime日期時間型,text文本字符串
23、如何調試并查看錯誤日志?
打開調試功能:php.ini 里設置error_reporting = E_ALL以及 display_errors = On,重啟 web服務(apache)。
一般來講,Linux系統下(以Centos為例) Php的錯誤日志會記錄在 /var/log/httpd 下的errror_log 里,可通過tail -n 5 -f error_log查看最近幾條錯誤日志。
24、php與apache(nginx)的關系?php代碼是如何執行的?
php?是一種編程語言,Apache是一種站點服務器軟件,在Apache的conf配置文件里有LoadModule?php5_module?modules/libphp5.so的類似語句加載php,?Apache?處理請求頁面時,發現頁面中內嵌的?<?php>?...?<?>,就會根據配置調用?php?解釋器執行這段?php?代碼。
25、echo,print()和print_r()有什么區別?
- echo是PHP語句,無返回值;print和print_r是函數,可以有返回值。
- print() 只能打印出簡單類型變量的值(如int,string)
- print_r() 可以打印出復雜類型變量的值(如數組,對象)
26、使用php寫一段簡單查詢,查出所有姓名為”張三“的內容并打印。
$result = mysql_query("SELECT * FROM users WHERE name='張三'"); while($row=mysql_fetch_array($result)) {echo $row['name'].$row['tel'].$row['addr'];echo "<br>"; }
27、請寫一個函數驗證電子郵件的格式是否正確(要求使用正則)
function checkMail($mailText) {if(ereg("^[0-9a-z][a-z0-9\._-]{1,}@[a-z0-9-]{1,}[a-z0-9]\.[a-z\.]{1,}[a-z]$", $mailText)echo "correct!";elseecho "wrong!"; }
28、不用php內置函數實現數組排序。如:array("d"=>100, "c"=>22, "a"=>22)?
<?php $arr=array("d"=>100,"b"=>22,"c"=>22,"a"=>22); $newArr=array();while ($arr) {$key=null;$value=null;foreach ($arr as $k=>$v){if($v>$value||($v==$value&&$k>$key)){$key=$k;$value=$v;}}$newArr[$key]=$value;unset($arr[$key]); } print_r($newArr); ?>
? ? ? or?http://www.blogbus.com/vontall-logs/4262770.html
轉載于:https://www.cnblogs.com/bluevoid7/p/3822528.html
總結
以上是生活随笔為你收集整理的[PHP]php基础练习题学习随笔的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 北圣兽元紫
- 下一篇: corepython第九章:文件和输入输