相传是yahoo的题

PHP 林涛 1742℃ 0评论

1. 给你一行文字 $string,你会如何编写一个正规表达式,把 $string 内的 HTML 标籤除去?
首先,PHP 有内建函式 strip_tags() 除去 HTML 标籤,為何要自行编写正规表达式?好了,便当作是面试的一道考题吧,我会这样回答:

$stringOfText = “

This is a test

“;
$expression = “/<(.*?)>(.*?)</(.*?)>/”;
echo preg_replace($expression, “″, $stringOfText);
// 有人说也可以使用 /(<[^>]*>)/
$expression = “/(<[^>]*>)/”;
echo preg_replace($expression, “”, $stringOfText);

2. PHP 和 Perl 分辨阵列和散列表的方法有什麼差异?
这正是為何我老是告诉别人选择适当的编程语言,若果你只用一种语言的话你怎麼能回答这道问题?这道问题很简单,Perl 所有阵列变量都是以 @ 开头,例如 @myArray,PHP 则沿用 $ 作為所有变量的开头,例如 $myArray。
至於 Perl 表示散列表则用 ¼Œ例如 yHash,PHP 则没有分别,仍是使用 $,例如 $myHash。


3. 你如何利用 PHP 解决 HTTP 的无状态本质?
最主要的俩各选择是 session 和 cookie。使用 session 的方法是在每一页的开始加上 session_start(),然后利用 $_SESSION 散列表来储存 session 变量。至於 cookie 你只需记着一个原则:在输出任何文字之前调用 set_cookie() 函式,此外只需使用 $_COOKIE 散列表便可以存取所有 cookie 变量。
还有一个不那麼可靠的方法,就是利用访客的 IP 地址,这个方法有特定的危险性。


4. GD 函式库用来做什麼?
这个可能是我最喜欢的函式库,自从 PHP 4.3.0 版本后 GD 便内建在 PHP 系统中。这个函式库让你处理和显示各式格式的图档,它的另一个常见用途是製作所图档。GD 以外的另一个选择是 ImageMagick,但这个函式库并不内建於 PHP 之中,必须由系统管理员安装在伺服器上。


5. 试写出几个输出一段 HTML 代码的方法。
嗯,你可以使用 PHP 中任何一种输出语句,包括 echo、print、printf,大部分人都使用如下例的 echo:

echo “My string $variable”;

你也可以使用这种方法:

echo <<
This text is written to the screen as output and this $variable is parsed too.
If you wanted you can have HTML tags in here as well.
The END; remarks must be on a line of its own, and can’t contain any extra white space.
END;

6. PHP 比 Perl 好吗?请讨论。
我们不要為一个简单的问题引发一场舌战,正如我经常说的:「為工作选择适合的语言,不要把工作迁就语言。」我个人认為 Perl 十分适合用作命令行工具,虽然它在网页应用上也有不错的表现,但是它的真正实力在命令行上才能充分发挥。同样地,PHP 虽然可以在控制台的环境中使用,但是个人认為它在网页应用上有更好的表现,PHP 有大量专门為网页应用而设计的函式,Perl 则似乎以命令行為设计之本。
个人来说两种语言我都喜欢,在大学期间我经常使用 Perl、PHP 和 Java,可惜工作上我使用 C#,但在家裡我花不少时间操练 PHP、Perl、Ruby(现正学习)和 Java,保持我的技能知识在最新状态。很多人问我 C 和 C   怎麼样,它们是否仍有机会在我的应用中佔一席位,我的答案基本上是「否」,我近来的工作主要集中在网页开发,虽然 C 和 C   也可以用来写网页,但它们到底不是為这种工作而设计的,「為工作选择适合的语言」,若果我需要编写一个控制台应用,用来展示 bubble sort、quick sort 和 merge sort 的效能比较,我一定会使用 C / C  。若果我需要编写一个相片簿系统,我会使用 PHP 或者 C#(我认為製作用户介面方面 .NET 语言比网页更加)。

 

外一篇:

1. 在一个类别内如何存取这个类别的特性及变改它的值?
使用语句:$this->propertyName,例如:

class myclass
{
private $propertyName;
public function __construct()
{
$this->propertyName = “value”;
}

// 我的理解是用构造函数 — by 林涛

2. include 和 include_once 有什麼分别?require 又如何?
叁者都是用来在脚本中插入其他档案,视乎 url_allow_fopen 是否核准,这个档案可以从系统内部或外部取得。但他们之间也有微细的分别:
include():这个函式容许你在脚本中把同一个档案插入多次,若果档案不存在,它会发出系统警告并继续执行脚本。
include_once():它跟 include() 的功能相似,正如它的名字所示,在脚本的执行期间,有关档案只会被插入一次。
require():跟 include() 差不多,它也是用来在脚本中插入其他档案,但若果档案不存在,它会发出系统警告,这个警告会引致致命错误令脚本中止执行。


3. 以下哪一个函式可以把瀏览器转向到另一个页面?
* redir()
这不是一个 PHP 函式,会引致执行错误。
* header()
这个是正确答案,header() 用来插入卷头资料,可以用来使瀏览器转向到另一个页面,例如:

header(”Location: http://www.search-this.com/”);

* location()
这不是一个 PHP 函式,会引致执行错误。
* redirect()
这不是一个 PHP 函式,会引致执行错误。


4. 以下哪一个函式可以用来开启档案以便读/写?
* fget()
这不是一个 PHP 函式,会引致执行错误。
* file_open()
这不是一个 PHP 函式,会引致执行错误。
* fopen()
这是正确答案,fopen() 可以用来开啟档案以便读/写,事实上这个函式还有很多选项,详细资料请参阅 php.net。
* open_file()
这不是一个 PHP 函式,会引致执行错误。


5. mysql_fetch_row() 和 mysql_fetch_array() 有什麼分别?
mysql_fetch_row() 把数据库的一列储存在一个以零為基数的阵列中,第一栏在阵列的索引 0,第二栏在索引 1,如此类推。mysql_fetch_assoc() 把数据库的一列储存在一个关联阵列中,阵列的索引就是栏位名称,例如我的数据库查询送回「first_name」、「last_name」、 「email」叁个栏位,阵列的索引便是「first_name」、「last_name」和「email」。mysql_fetch_array() 可以同时送回 mysql_fetch_row() 和 mysql_fetch_assoc() 的值。


6. 下面的代码用来做什麼?请解释。

$date=’08/26/2003′;
print ereg_replace(”([0-9] )/([0-9] )/([0-9] )”,”//″,$date);

这是把一个日期从 MM/DD/YYYY 的格式转為 DD/MM/YYYY 格式。我的一个好朋友告诉我可以把这个正规表达式拆解為以下的语句,对於如此简单的表示是来说其实无须拆解,纯粹為了解说的方便:

// 对应一个或更多 0-9,后面紧随一个斜号
$regExpression = “([0-9] )/”;
// 应一个或更多 0-9,后面紧随另一个斜号
$regExpression .= “([0-9] )/”;
// 再次对应一个或更多 0-9
$regExpression .= “([0-9] )”;

至於 // 则是用来对应括号,第一个括号对的是月份,第二个括号对应的是日期,第叁个括号对应的是年份

 

外一篇:

1. foo() 与 @foo() 有什麼分别?
foo() 会执行这个函式,任何解译错误、语法错误、执行错误都会在页面上显示出来。
@foo() 在执行这个函式时,会隐藏所有上述的错误讯息。
很多应用程式都使用 @mysql_connect() 和 @mysql_query 来隐藏 mysql 的错误讯息,我认為这是很严重的失误,因為错误不该被隐藏,你必须妥善处理它们,可能的话解决它们。


2. 你如何替 PHP 的应用程式侦错?
我并不常这样做,我曾经试过很多不同的侦错工具,在 Linux 系统中设定这些工具一点也不容易。不过以下我会介绍一个近来颇受注目的侦错工具。
PHP – Advanced PHP Debugger 或称 PHP – APD,第一步是执行以下的指令安装:

pear install apd

安装后在你的脚本的开头位置加入以下的语句开始进行侦错:

apd_set_pprof_trace();

执行完毕,打开以下档案来查阅执行日誌:
apd.dumpdir
你也可以使用 pprofp 来格式化日誌。
 

3. 「===」是什麼?试举一个「==」是真但「===」是假的例子。

「===」是给既可以送回布尔值「假」,也可以送回一个不是布尔值但却可以赋与「假」值的函式,strpos() 和 strrpos() 便是其中两个例子。
问题的第二部份有点困难,想一个「==」是假,但是「===」是真的例子却很容易,相反的例子却很少。但我终於找到以下的例子:

      if (strpos("abc", "a") == true)
      {
          // 这部分永不会被执行,因為 "a" 的位置是 0,换算成布尔值「假」
      }
      if (strpos("abc", "a") === true)
      {
          // 这部份会被执行,因為「===」保证函式 strpos() 的送回值不会换算成布尔值.

      }


4. 你会如何定义一个没有成员函式或特性的类别 myclass?

      class myclass
      {
      }


5. 你如何產生一个 myclass 的物件?

$obj = new myclass();

 

如需转载请注明: 转载自26点的博客

本文链接地址: 相传是yahoo的题

转载请注明:26点的博客 » 相传是yahoo的题

喜欢 (0)
发表我的评论
取消评论

表情