每个优秀的PHP开发人员都应该能够回答的问题 [已关闭]
我正在研究每个优秀的.Net开发人员应该能够回答的问题,并且对这个问题的内容和方法印象深刻,因此本着同样的精神,我向PHP开发人员提出这个问题。
你认为一个好的PHP程序员应该能够回答什么问题?
编辑:我将这个问题标记为社区wiki,因为它不是特定于用户的,它旨在为整个编程社区服务。
期待一些惊人的回应。
注意:请按照评论中的建议回答问题,以便人们也可以学习有关该语言的新知识。
我正在研究每个优秀的.Net开发人员应该能够回答的问题,并且对这个问题的内容和方法印象深刻,因此本着同样的精神,我向PHP开发人员提出这个问题。
你认为一个好的PHP程序员应该能够回答什么问题?
编辑:我将这个问题标记为社区wiki,因为它不是特定于用户的,它旨在为整个编程社区服务。
期待一些惊人的回应。
注意:请按照评论中的建议回答问题,以便人们也可以学习有关该语言的新知识。
诚然,我从其他地方偷了这个问题(不记得我在哪里读过它了),但觉得这很有趣:
问:什么?
答:它是范围解析运算符(双冒号)T_PAAMAYIM_NEKUDOTAYIM
一个有经验的PHP'er立即知道它意味着什么。经验不足(不是希伯来语)的开发人员可能想阅读这篇文章。
但现在有更严肃的问题:
问:此警告的原因是什么:“警告:无法修改标头信息 - 已发送的标头”,防止它的良好做法是什么?
答:原因:正文数据已发送,导致标头也已发送。
预防:在输出任何正文数据之前,请确保先执行特定于标头的代码。确保您没有意外地发出空格或任何其他字符。
问:此查询有什么问题:?
答:1.它对SQL注入是脆弱的。切勿在查询中直接使用用户输入。首先对其进行消毒。最好使用预准备语句 (PDO) 2.不要选择所有列 (*),而是指定每一列。这主要是为了防止查询在将来的某个时候添加 BLOB 列时占用内存。"SELECT * FROM table WHERE id = $_POST[ 'id' ]"
问:这个 if 语句有什么问题: ?
A: 返回它首次找到$needle的索引位置,可以是 。由于也解析到的解决方案是使用严格的比较:if( !strpos( $haystack, $needle ) ...
strpos
0
0
false
if( false !== strpos( $haystack, $needle )...
问:编写此 if 语句的首选方法是什么,为什么?
或
A:前者,因为它可以防止当您忘记使用2个等号()时意外分配5到$someVar,并且会导致错误,后者不会。if( 5 == $someVar )
if( $someVar == 5 )
$someVar = 5
问:给定此代码:
function doSomething( &$arg )
{
$return = $arg;
$arg += 1;
return $return;
}
$a = 3;
$b = doSomething( $a );
...函数调用后的值是什么,为什么?
答:是 和 是 。前者是因为$arg是通过引用传递的,后者是因为函数的返回值是参数初始值的副本(而不是引用)。$a
$b
$a
4
$b
3
特定于 OOP
问:和 类定义中 有什么区别?
答:使类成员对“所有人”可用,使类成员仅对自身和派生类可用,使类成员仅对类本身可用。public
protected
private
public
protected
private
问:此代码有什么问题:
class SomeClass
{
protected $_someMember;
public function __construct()
{
$this->_someMember = 1;
}
public static function getSomethingStatic()
{
return $this->_someMember * 5; // here's the catch
}
}
一个:静态方法无权访问$this,因为静态方法无需实例化类即可执行。
问:接口和抽象类有什么区别?
答:接口定义实现类 is 与调用接口的对象之间的协定。抽象类为将扩展它的类预先定义了某些行为。在某种程度上,这也可以被认为是一种合同,因为它保证了某些方法的存在。
问:主要定义 getter 和 setter 的类有什么问题,它们直接映射到它的内部成员,而实际上没有执行行为的方法?
答:这可能是一种代码异味,因为该对象充当了一个 ennobled 数组,没有太多其他用途。
问:为什么PHP对接口使用的实现不是最优的?
答:PHP不允许你定义方法的预期返回类型,这基本上使接口变得毫无用处。9-3
明确的安全问题!
(在这篇文章中简单的答案,当然保护php Web应用程序要复杂得多)
mysql_real_escape_string() 从 MySQL 开始。然后尝试学习 PDO 以利用预准备语句和跨数据库供应商的可移植性。
在每个重要请求上添加一个令牌以保护重要操作(用户在发送关键请求之前必须看过表单)。
htmlentities() 是一个很好的开始。
您需要知道XXX使用的“词汇”是什么,然后扣除您需要清理和/或“检查和拒绝”的内容。
解释 PHP 代码(可能包含在远程文件中)或在系统上执行命令的函数。一个简短而不完整的列表可以是:exec(),passthru(),system(),popen(),eval(),preg_replace()...
需要仔细检查打开文件或远程资源时使用的参数。
它会很长,所以我跳过答案,请阅读PHP手册。
第一个将条目转换为不那么敌对的东西。第二个检查输入是否正确,如果没有拒绝它。