English 中文(简体)
有没有一种“正确”的方式来使用php?
原标题:Is there a "right" way to use php?

我一直在学习php,只是在学习它。

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

谢谢

编辑--

I suppose a better way to phrase what i am trying to ask is.. What is the best practice:
1.) when processing forms with php, get vs post, $_REQUEST vs $_GET & $_POST
2.) when dynamically creating HTML files (example below)
3.) logins & authentication in the same file as the form creator
4.) Sending e-mail with 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: Thanks to everyone who already responded. Can I also inquire where does a framework fit? I took a class in OOP and we didn t become familiar with any frameworks.

我读了很多关于Symfony和zend框架的文章,但仍然感到困惑。

再次感谢。

最佳回答

PHP社区从未真正擅长提供任何开发指导方针或倡导最佳实践。在框架之前的日子里,大多数开发人员编写的典型php代码非常业余且杂乱无章——请参阅Wordpress源代码。但是PHP是一种很好的网络应用程序语言。它是为网络而设计的,如果你愿意的话,你可以用它编写好的专业代码。抨击它但忽略那些东西是很流行的。

不管怎样,就像其他人在这里说的那样,你最好的选择是使用一个框架。作为一个新手,选择一个有良好文档记录并拥有强大社区的框架来帮助你度过难关是很重要的。以下是我对主要php框架的概述:

  • Kohana => a good one but poorly documented with a weak community. skip it.
  • Zend => the most popular framework for php w/good docs but another poor performer as it s overdone with objects and patterns in an attempt to be overly enterprisey.
  • Cake & Symfony => are 1st generation php frameworks and also have a rep for poor performance. I d skip both. A new version of symfony is in the works but not ready.
  • Lithium => cutting edge new framework led by one of the Cake devs. using php 5.3 and claims to be fast. BUT, not at v.1 yet & also have poor docs at this point => http://li3.me.

代码点火器=>;流行,快速,好的文档和社区。非常容易学习。v2.0尚未正式发布,但已准备好用于生产,并且仅为php5版本。您可以使用v1.7版CI站点上的相同文档。版本非常相似,除了2.0最终放弃了对php4的支持。这是2.0版的下载:http://bitbucket.org/ellislab/codeigniter/

YII => Really gaining momentum despite it s goofy name. It s a fast performer with GREAT documentation and a ton of features. A new book is out too. The community is so-so but growing. This framework imo takes a lot from rails. There a web-based code generation tool and it uses active record. http://yiiframework.com/

由于代码生成和活动记录,使用YII可以更快地构建应用程序,但它比CI更难学习。当你试图用YII的方式做每件事时,你可能会发现它也会阻碍你。CI更灵活-为您提供所需的基础,而不会妨碍您的工作。所以现在我推荐代码点火器。

祝你好运

问题回答

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

PHP特定-学习公认的编码标准,例如PEARs或Zends。在你吸收了一些概念后,找一个好的参考资料,比如其他答案中提到的顶级框架之一——Zend Framework、CakePHP、Symfony等等。

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

  • Zend Framework
  • CakePHP
  • CodeIgniter (See comments)
  • Kohana (From @Alex s answer)

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

看看一个信誉良好的开源软件,它以良好的代码而闻名。

查看Kohana的来源,或Billy ONeal的回答

我不建议使用CI的源代码作为指南,因为我认为它仍然支持PHP4,所以有些代码对学习毫无用处,除非你计划编写PHP4代码,如果你现在才学习,这是个坏主意。

不要看WordPress,你会养成一些糟糕的习惯。

此外,在我思考它的同时,了解OO,以及与过程代码的区别。

为什么每个人都攻击php?许多优秀的网站都会挤掉它。至少在它们变得足够大,值得大修之前。

与脸书或亚马逊等网站相比,99%的互联网都是流量不大的一次性网站,那么,如果php以一种既稳定又安全的方式完成了这项工作,那么他们为什么要学习一种更复杂、更稳定或更严格的语言呢?

我建造的大多数网站都在科哈纳附近运行,科哈纳是代码点火器的一个分支。两者都很有用。谁在乎CI是否使用php4。如果你被一家网站陈旧的网络公司雇佣了怎么办?你猜怎么着-你需要知道php4。这种抱怨就像是说你不再需要知道表格html。。。直到你必须为某家大公司设计和编写时事通讯模板。然后呢?用谷歌搜索速成课程?

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

我想说,你可以从Kohana这样的框架——甚至CI——中学到很多东西,因为两者都有不错的安全方法,不难遵循。比如数据库转义和xss过滤。如果你不熟悉OO编程,并且两者都有不错的用户基础,那么它会把你带入OO编程,这样你就不会陷入没有答案的困境。

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

用PHP编写好代码是可能的。到目前为止,我在StackOverflow中看到的最好的资源可能是:浏览标记为PHP的问题。

从我多年的PHP编程中,不分先后,有一些具体的事情可以帮助你:

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

  • 同样,请确保关闭了magic_quotesregister_globals。它们都是为更简单、更天真的编程时代而设计的,如今产生的问题比解决的问题多。

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

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

  • 检查您期望的变量。这是一个棘手的问题。这方面的一个很好的例子是在处理可能有很多可变元素的HTTPPOST时。找出$_POST中的应该是什么,然后查找它。不要以为提交的东西总是应该提交的。

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

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

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

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

为了提供除“使用框架”或“查看框架”之外的其他内容,我发现以下是一些快速的经验法则PHP特定实践,它们起到了很大的作用。

  1. Use PDO and abstract it into a class (or use an existing class). Do not use mysql_query or such functions.
  2. Logic before output. Do not do things such as <?php if($x) { ?> HTML here <?php } ?> (using HEREDOC syntax helps enormously with this).
  3. Use the __autoload magic method to limit includes

仅这些就将是我所看到的许多丑陋的PHP代码的昼夜转换。然后是明显的语言不可知规则,如一致的命名约定、自文档化代码等。





相关问题
CSS working only in Firefox

I am trying to create a search text-field like on the Apple website. The HTML looks like this: <div class="frm-search"> <div> <input class="btn" type="image" src="http://www....

image changed but appears the same in browser

I m writing a php script to crop an image. The script overwrites the old image with the new one, but when I reload the page (which is supposed to pickup the new image) I still see the old one. ...

Firefox background image horizontal centering oddity

I am building some basic HTML code for a CMS. One of the page-related options in the CMS is "background image" and "stretch page width / height to background image width / height." so that with large ...

Separator line in ASP.NET

I d like to add a simple separator line in an aspx web form. Does anyone know how? It sounds easy enough, but still I can t manage to find how to do it.. 10x!