百度php面试题(九)
第一题、现有如下代码:
$a = true;
$b = false;
$c = 0812;
$d = 0x812;
echo "$a has value: ".$a;
echo '$b has value: '.$b;
echo '$c has value: '.$c;
echo '$d has value: '.$d;
请写出程序输出结果
第二题、现有如下接口
interface ILogger{
public function __construct($filename);
public function write($lgo);
public function read();
}
现需要日志读写的Logger类,通过构造函数指定了日志文件的路径,通过调用write和read方法完成日志文件的读写。
1、请使用ILogger接口实现Logger类
2、现有如下Database类的代码,使用上题中的Logger类通过日志记录数据库的操作。
class Database{
private $db;
private $logger;
public function __construct(ILogger $logger,$dsn = 'mysql:dbname=testdb;host=127.0.0.1',$user = 'dbuser',$password = 'dbpass'){
$logger = $logger;
try{
$db = new PDO($dsn,$user,$password);
} catch(PDOException $e){
$logger->write('Connection failed: {$e->getMessage()}');
}
}
public function execute($sql){
$result = $db->exec($sql);
if($result)
$logger->write('$sql is executed,$result line(s) is(are) rows affected by the statement.');
else
$logger->write('Failed to execute : $sql');
}
}
请问,上述代码是否正确?如果不正确,请指出错误的代码段并修改。
第三题、假设位于192.168.1.100的数据库dbname中的用户表Users有如下结构
其中userId为用户id,值大等于0;username为登录用户名,name为用户真实姓名,passwd为用户密码的MD5值。
用户通过登录页面提交登录信息。登录页面表单代码如下:
用户名:
密码:
在php程序中需要定义User类,使用单例模式,实现用户登录、退出功能,其包含如下4个函数:
getUserInstance:获取用户对象,如果用户对象已创建,返回用户对象;如果登录过,从保存的信息中获取用户的ID并创建对象,如果没有登录,则跳转到登录页面login.php
login:用户登录验证函数,如果用户成功登录,login函数可以返回用户的ID(数据库userId的值)和用户真实姓名,如果不成功,返回false。
logout:退出当前登录
__construct:User类的构造函数,初始化用户对象,包括用户ID,用户登录名、用户真实名等
3.1请用PHP完成User类。
第四题、现有下图的树形结构
该结构存储在数据库Tree表中,Tree表结构如右表所示,其中Id为节点编号,ParentId为父节点编号。
请实现统计给定节点的子节点的数量。例如2的子节点(即节点4,5,6,7)的数量为4,3的子节点数量为0