[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

$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!";
    else
        echo "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

posted on 2015-04-20 13:11  小驴车头  阅读(795)  评论(0编辑  收藏  举报