【问题标题】:php classes exception handling questionphp类异常处理问题
【发布时间】:2011-01-25 23:03:51
【问题描述】:

有一个针对我正在做的工作申请的开卷测验,它显然突出了我在 php 知识方面的一个不足。

请注意,我不是直接要求答案,而是要求向我展示我在如何回答方面存在的误解/缺乏。问题是:

3. Finish the following class to print "Person->name has been zapped" when the 
following is executed on a Person object: print $person;


class Person{
  private $name = '';
  public function __construct($name){
    $this->name = $name;
  }
}

$person = new Person('fred');
print $person; // fred has been zapped

现在,要么有一些向类添加异常处理的方法(尽管我认为“打印”会引发异常,或者我只是误解了这个问题。我知道(通过快速测试) 将 print 放入 try..catch 仍然会导致程序失败并出现“可捕获的致命错误”(我的 catch 没有触发)。

我应该阅读什么?

大卫

【问题讨论】:

  • 尽量不回答你的问题;相反,为了给你一个提示:问题(#3)在哪里提到了例外?是什么让您觉得需要使用 try...catch?

标签: php class printing exception


【解决方案1】:

当您尝试回显/输出一个对象时,魔术方法__toString() 会被调用——如果它是为该对象作为其实例的类定义的。

在这里,您必须修改类,添加 __toString 方法的定义,该方法将返回名称,以及字符串的“已被删除”部分:

class Person{
  private $name = '';
  public function __construct($name){
    $this->name = $name;
  }
  public function __toString() {
    return $this->name . ' has been zapped';
  }
}

$person = new Person('fred');
print $person; // fred has been zapped

你会得到预期的输出:

fred has been zapped

【讨论】:

    【解决方案2】:

    嗯,听起来更像是他们在寻找您的 PHP5 类知识。我建议您查看 PHP 的 magic methods,以更深入地了解如何完成您想要做的事情。

    基本上,您正在寻找相关对象的可打印表示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-27
      • 1970-01-01
      • 2011-01-18
      相关资源
      最近更新 更多