百度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值。 用户通过登录页面提交登录信息。登录页面表单代码如下:

<from name="loginForm" method="post" action="userlogin.php">
  <p>
    <label for="username" class="label">用户名:</label>
    <input id="username" name="username" type="text" class="input"/>
  </p>
  <p>
    <label for="password" class="label">密码:</label>
    <input id="password" name="password" type="password" class="input"/>
  </p>
  <p>
    <input type="submit" name="submit" value="确定" class="left" />
  </p>
</from>

在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