是否有一种“正确”的方式来使用PHP?

时间:2010-10-21 00:01:03

标签: php html zend-framework symfony1

我一直在学习php,只需插上它即可。

我希望有人能指出我在安全,流程和一般最佳实践方面的正确方向?

感谢。

编辑 -

我想用一种更好的方式来表达我想要问的是...... 最佳做法是什么:
1.)使用php处理表单时,获取vs post,$ _REQUEST vs $ _GET& $ _ POST
2.)动态创建HTML文件时(例如下面)
3.)登录&在与表单创建者相同的文件中进行身份验证 4.)使用php发送电子邮件

来自上面的#2

<?php
echo "<h1> Welcome </h1>";

if ($_SESSION['type'] == "admin")
{
//lots of html in the echo statment
echo "tables and admin interface here";
} else
{
//lots of html in the echo statment
echo "tables and user dashboard here";
}
?>

--VS--


<h1> Welcome </h1>

<?php
if ($_SESSION['type'] == "admin")
{
 ?>
lots of html in the echo statment    
tables and admin interface here 
<?php
} else
{
 ?>
lots of html in the echo statment    
ables and user dashboard here    
<?php
}
?>

--VS-- 

<?php if($_SESSION['username']): ?>

<p>You are logged in as <?=$_SESSION['username']?></p>

<p><a href="?logout=1">Logout</a></p>

<?php endif; ?>

PS: 感谢所有已经回复的人。 我还可以询问框架适合哪里?我参加了OOP课程,但我们并没有熟悉任何框架。

我在Symfony和zend框架上阅读了很多内容,但我仍感到困惑。

再次感谢。

7 个答案:

答案 0 :(得分:9)

良好的编程与语言无关。我建议你开始研究软件开发概念,如面向对象编程,设计模式,关注点分离,重用,封装,测试和重构。从任何一个开始,继续“堵塞”列表,你会变得更好。

PHP特定 - 学习可接受的编码标准,例如PEARZend。在你理解了一些概念之后,选择一个很好的参考,比如其他答案中提到的顶级框架之一 - Zend Framework,CakePHP,Symfony等。

答案 1 :(得分:5)

使用免费提供的框架,例如:

  • Zend Framework
  • CakePHP的
  • CodeIgniter(见评论)
  • Kohana(来自@Alex's answer

并遵循该框架指定的标准。

答案 2 :(得分:5)

PHP社区从未真正提供任何开发指南或倡导最佳实践。在前框架期间,大多数开发人员编写的典型PHP代码非常业余且杂乱无章 - 请参阅Wordpress源代码。但PHP是一种很好的Web应用程序语言。它是为网络制作的,如果你愿意,你可以用它编写好的专业代码。打击它是时髦的,但忽略了那些东西。

无论如何,就像其他人在这里说的那样,你最好的选择是使用一个框架。作为一个新手,重要的是你选择一个文档齐全的框架,并有一个强大的社区来帮助你克服困难。这是我对主要php框架的概述:

  • Kohana =&gt;一个好的,但在社区薄弱的情况下记录不佳。跳过它。
  • Zend =&gt;最流行的php w / good docs框架,但另一个表现不佳的人,因为它试图过于企业化而过度使用对象和模式。
  • 蛋糕&amp; Symfony =&gt;是第一代PHP框架,也有一个表现不佳的代表。我会跳过这两个。 symfony的新版本正在开发中,但尚未准备就绪。
  • 锂=&gt;由蛋糕开发者之一领导的尖端新框架。使用PHP 5.3并声称速度很快。但是,还没有在v.1和&amp;此时也有糟糕的文档=&gt; http://li3.me

Codeigniter =&gt;流行,快速,优秀的文档和社区。很容易学习。 v2.0尚未正式发布,但已准备好投入生产,仅限php5。您可以使用CI站点上的相同文档v1.7。版本非常相似,除了最终2.0滴php 4支持。这是2.0的下载:http://bitbucket.org/ellislab/codeigniter/

YII =&gt;尽管名声太高,但真的获得了动力。它是一个快速执行者,拥有GREAT文档和大量功能。一本新书也出版了。社区是一般的,但正在增长。这个框架imo需要很多来自rails。有一个基于网络的代码 生成工具,它使用活动记录。 http://yiiframework.com/

由于代码生成和活动记录,您可以使用YII更快地构建应用程序但是它比CI更难学习。当你尝试以YII的方式做所有事情的时候,你可能会发现它也会受到影响。 CI更灵活 - 为您提供所需的基础,而不是妨碍您。所以现在我推荐codeigniter。

祝你好运!

答案 3 :(得分:4)

看看一个声誉良好的开源软件,这个软件以良好的代码着称。

查看Kohana's sourceBilly ONeal's answer中的任何其他人。

我不建议使用CI的源代码作为指导 - 因为我认为它仍然支持PHP4,因此一些代码将无用学习 - 除非你打算编写PHP4代码,如果你是一个坏主意现在才学习。

不要看WordPress,你会发现一些可怕的习惯。

此外,虽然我想到了,但要了解OO,以及与程序代码的区别。

答案 4 :(得分:3)

为什么每个人都在攻击php?许多优秀的网站都有它。至少在他们变得足够大以至于值得进行大修之前。

与Facebook或亚马逊等网站相比,99%的互联网只是扔掉了没有太多流量的网站,所以为什么他们要关心学习更复杂,稳定或严格的语言,如果php得到了以符合成本效益的方式完成工作,对所需要的工作同样稳定或安全?

我建造的大多数网站都是靠Kohana运行的 - 来自codeigniter的分支。两者都很有用。谁在乎CI是否使用php4。如果您被拥有古老网站的网络公司聘用怎么办?猜猜看 - 你需要知道php4。这种抱怨就像是说你不再需要知道表格的HTML ...直到你必须为一些大公司设计和编写新闻稿模板。那又怎样?谷歌搜索崩溃当然?

我说使用PHP的正确方法是遵循示例。是的wordpress有一些可怕的习惯,但它有效,并且只是那里最成功的平台之一。这告诉你什么?

我想说你可以从像Kohana这样的框架中学到很多东西 - 甚至CI - 因为它们都有不错的安全方法,这些方法并不难理解。像数据库转义和xss过滤之类的东西。如果您不熟悉并且两者都拥有不错的用户群,那么它会让您进入OO编程,这样您就不会遇到任何答案。

不要让这些家伙吓唬你。对于初学者来说PHP是一个很好的举措。最终,像Java或目标C这样的东西对于工作和应用程序会更有益,但是当你到达那里时可以学习它。

答案 5 :(得分:3)

可以在PHP中很好地编码。可能是迄今为止我在StackOverflow中看到的最好的资源:浏览标记为PHP的问题。

没有特别的顺序,一些特定的东西可以帮助你完成我在PHP编程的过程:

  • 启用通知,然后确保不编写触发它们的代码。 PHP的默认安装启用Notices,这对于生产环境来说很好,但对于开发环境则不好。不幸的是,他们的默认php.ini文件似乎不知道它是哪个例子。

  • 同样,请确保您已关闭magic_quotesregister_globals。它们都是为更简单和天真的编程时间而设计的,现在产生的问题比他们解决的更多。

  • 在使用变量之前初始化变量。这也意味着数组元素。如果您的代码不确定变量或元素是否存在,请使用isset()array_key_exists()

  • 选择或开发一种合理的编码风格并坚持下去。您不需要节省空格或换行符。

  • 检查您要求的变量。这是一个棘手的问题。一个很好的例子是处理可能包含大量可变元素的HTTP POST。弄清楚应该$_POST中的内容并寻找它。不要认为提交的内容总是应该提交的内容。

  • 沿着相同的行,检查正确的值,而不是错误的值。如果需要变量具有有效值,请在继续之前查找构成有效值的内容,而不是丢弃的无效值。例如,如果您需要将提交的变量作为整数,那么检查它是否为整数,不要检查空字符串,因为空字符串不是唯一的无效值!

  • 单独的数据库访问,逻辑和表示(这通常称为模型 - 视图 - 控制器编程)。另一种方法是,您不应该将处理最后POST请求的代码与使用SQL查询发出的HTML标记混合在一起。大多数框架都会强制执行此操作。

  • 如果您没有使用提供Object层的框架,那么您将使用自己的SQL。要么使用预准备语句,要么使用DB自己的字符串引用函数,而不是addslashes()

  • 在PHP 4中很容易使用大量内存,因为结构被复制,没有被引用。 PHP 5在很大程度上解决了这个特定的问题,但它仍然可以发生在字符串中。这也没有解决某些API创建大型结构的趋势。

答案 6 :(得分:2)

除了提供“使用框架”或“查看框架”之外,还提供了一些快速的经验法则,我发现这些做法可以带来很大的不同。

  1. 使用PDO并将其抽象为类(或使用现有类)。请勿使用mysql_query或此类功能。
  2. 输出前的逻辑。不要做<?php if($x) { ?> HTML here <?php } ?>之类的事情(使用HEREDOC语法对此有很大帮助)。
  3. 使用__autoload魔法限制包含
  4. 仅这些就是我看到的许多丑陋的PHP代码的夜间转换。然后有明显的语言不可知规则,如一致的命名约定,自我记录代码等。