繁体   English   中英

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

[英]Is there a “right” way to use php?

我一直在学习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框架上阅读了很多,但我仍然感到困惑。

再次感谢。

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

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

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

  • Zend框架
  • CakePHP的
  • CodeIgniter(见评论)
  • Kohana(来自@ Alex的回答

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

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

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

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

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

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

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

祝好运!

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

看看Kohana的来源 ,或者Billy ONeal的答案中的任何其他来源。

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

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

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

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

与facebook或亚马逊这样的网站相比,99%的互联网只是丢弃了没有太多流量的网站,所以为什么他们要关心学习更复杂,稳定或严格的语言,如果php完成工作的话一种经济有效的方式,对于所需要的东西来说同样稳定或安全吗?

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

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

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

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

可以在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创建大型结构的趋势。

为了提供除“使用框架”或“查看框架”之外的其他内容,这里有一些快速的经验法则,我发现PHP特定的实践会产生很大的不同。

  1. 使用PDO并将其抽象为类(或使用现有类)。 不要使用mysql_query或这样的函数。
  2. 输出前的逻辑。 不要做<?php if($x) { ?> HTML here <?php } ?> (使用HEREDOC语法对此有很大帮助)。
  3. 使用__autoload magic方法限制包含

仅这些就是我看到的许多丑陋的PHP代码的夜间转换。 然后有明显的语言不可知规则,如一致的命名约定,自我记录代码等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM