Questions tagged «php»

有关PHP(一种广泛用于通用脚本语言,特别适合于Web开发)的问题。

5
PHP,HTML,Javascript和编写良好实践
我意识到我必须为我和我的团队写下有关HTML,JavaScript和PHP编码的约定规范。 在Web开发中,就像在C ++中一样,我绝对是缩进和注释的爱好者。 但是,在我的工作中,我经常会遇到HTML + JavaScript + PHP代码,这突然令人头疼。 我试图使我的代码可读,但是对我来说似乎更好的(缩进和注释)似乎并不使我的队友着迷,所以我想知道在编写“混合”时是否存在最佳或至少共享的良好实践就像今天的网页一样,文档变得越来越复杂。 我知道以下事实:今天的网页代码本质上可能有些复杂,但是我想知道是否存在关于这些方面的良好约定。


1
用PHP中的字符串公式评估数据集
我受命更新应用程序中的某些条件。我有一个要评估的数据集,并且已按照以下方式在应用程序中进行了硬编码: $arr = array( 'a' => 'apple', 'b' => 'orange', 'c' => 1, 'd' => 2, 'e' => 5, 'f' => 'green', 'g' => 'red', 'h' => 'yellow', ) $res1 = ($arr['a'] == 'apple') ? TRUE : FALSE; $res2 = (($arr['b'] == $arr['f']) && ($arr['c'] < $arr['d']) ? TRUE : …
9 php 

3
跨语言测试驱动开发
简短的问题:您如何在跨多种语言的项目中遵循测试驱动开发? 具体来说,我正在编写一个使用JavaScript和PHP的Web应用程序,我想遵循TDD原则,但是我不确定如何将它们集成在一起。是否为JS和PHP部分运行单独的测试套件,并在JS套件中使用模拟来模拟服务器响应?是否有一种技术可以一次测试两个组件? 这是我第一次使用“测试驱动开发”,因此您可以分享有关如何减少测试难度的任何建议都是很棒的。我之所以选择它,是因为一旦完成原型,需求就改变了,迫使我改变设计。我认为如果我要从头开始,我想从一开始就使用内置的回归测试编写更可扩展的代码。 我正在SimpleTest中编写PHP测试,在JsTestDriver中编写JavaScript测试。我习惯了面向对象的范例,因此在PHP中有一些类,并且我在JavaScript中使用原型继承来做类似的事情。我也已经开始阅读有关Python中TDD的书和有关JavaScript中TDD的书,但是从我看到的所有内容来看,这些并没有描述对应用程序进行完整的测试(除了使用Selenium或其他Web驱动程序之外)进行前端验收测试,TDD是否不适合全栈开发人员使用?

2
注册期间自动生成密码是一个好主意吗?
我正在为我正在从事的项目开发注册系统。 由于如果过程太长,用户往往不愿注册,所以我认为(至少最初需要)他们的电子邮件,然后将自动生成的密码发送给他们(这也使我可以验证他们的电子邮件地址) )。这也将阻止他们选择较弱的密码来快速完成注册。 到目前为止,我还没有发现任何弊端,但是由于我从未见过使用该系统的站点,因此恐怕还有一些弊端。 这是一个好主意吗? PS:当然,我也正在通过Facebook和其他类似服务实施注册,以使人们无需密码即可快速注册,但许多人可能出于隐私考虑或因为他们不愿意而选择经典注册使用任何这些服务。


1
菜单构建模式
当菜单不用于路由时,我难以理解菜单的活动状态处理。 我来自Drupal,菜单系统也处理路由。因此,设置活动状态和活动尾随状态由路由处理(也充当菜单渲染系统)。 现在,许多PHP框架都有处理路由的Router类。这似乎是一个很好的分隔,因为菜单不应该知道POST ||。选项|| ... 要求。 但是在编写前端时,我发现自己很难对菜单进行编码。或者将所有内容存储在数据库中,然后将这些值传递给视图。我不喜欢这种方法的原因是您正在创建已经在Router中写过的内容的副本,但是现在使用Menu类。 一个例子: Route::get('/somewhere','routename.somewhere','showStuffController'); Route::post('/somewhere','routename.somewhere','saveStuffController'); Menu::add('label.somewhere','routename.somewhere'); 您在这里分离关注点,所以很好。但是Menu在很大程度上取决于Route来设置其活动状态。菜单还必须了解有关设置活动跟踪的层次结构。 因此,是的,设置活动路径和活动状态类实际上是一种视图。但是有 if ( Route::currentName() === $menuitem->getRouteName() ) { print 'active'; } 您的所有观点看来都是愚蠢的。然后添加所有那些烦人的活动提示if,这确实是个肿。我知道,在视图渲染之前处理该问题并将active-trail标志设置为true似乎很丑陋(foreach遍历所有子级,遍历所有子级,...) 我的问题是: 有没有一种模式或聪明的方法来使这种清洁剂变得更好,更好……?一个人应该如何应对主动式“问题”? 我当时想渲染子级->父级。因此,从最深层次的广告开始,然后逐步发展。但是,孩子对父母一无所知,但父母对孩子一无所知(似乎很奇怪)。

3
两个组件提供相同的功能,但依赖关系不同
我正在使用Zend Framework 1和Doctrine2作为ORM层在PHP中构建应用程序。一切进展顺利。现在,我偶然发现ZF1和Doctrine2都附带并依赖于它们自己的缓存实现。我对两者都进行了评估,虽然每个人都有自己的优点和缺点,但就我的简单需求而言,它们都不比其他人优越。这两个库似乎都是针对各自的接口而不是针对其实现编写的。 我之所以认为这是一个问题,是因为在应用程序的引导过程中,我必须配置两个缓存驱动程序-每个都有自己的语法。这样很容易造成不匹配,因此,与缓存后端建立两个连接的效率很低。 我正在尝试确定最佳的前进方式,并欢迎您可能提供的任何见解。 到目前为止,我想到的是四个选择: 不执行任何操作,请接受存在两个提供缓存功能的类。 创建一个Facade类,将Zend的接口粘贴到Doctrine的缓存实现上。 选项2的另一种方法-创建一个Facade,以在Zend Framework后端上映射Doctrine的界面。 使用多接口继承创建一个接口来统治所有接口,并祈祷不存在任何重叠(即:如果两个都有“保存”方法,由于PHP的原因,它们将需要以相同的顺序接受参数)缺乏适当的多态性)。 哪个选项是最佳选择,或者我不知道有没有“以上所述”变体?

4
PHP file_put_contents文件锁定
Senario: 您有一个文件,每行上都有一个字符串(平均句子价值)。为了争辩,可以说这个文件的大小为1Mb(几千行)。 您有一个脚本来读取文件,更改文档中的某些字符串(不仅是追加,而且还要删除和修改某些行),然后用新数据覆盖所有数据。 问题: “服务器” PHP,OS或httpd等是否已经有适当的系统来阻止此类问题(在写入过程中进行读取/写入)? 如果可以,请说明其工作原理,并提供示例或相关文档的链接。 如果没有,我是否可以启用或设置某些东西,例如将文件锁定直到写入完成,并且使所有其他读取和/或写入失败,直到上一个脚本完成写入? 我的假设和其他信息: 该服务器正在运行PHP和Apache或Lighttpd。 如果脚本是由一个用户调用的,并且正在写入文件的一半,而另一位用户在该确切时刻读取了文件。阅读该文档的用户将无法获得完整的文档,因为该文档尚未编写。(如果这个假设是错误的,请纠正我) 我只关心PHP写入和读取文本文件,尤其是函数“ fopen” /“ fwrite”,主要是“ file_put_contents”。我查看了“ file_put_contents”文档,但未找到详细程度或对“ LOCK_EX”标志的含义或作用的很好解释。 该方案是最坏情况的一个示例,在该示例中,我认为由于文件的大尺寸和数据的编辑方式,这些问题更有可能发生。我想了解更多有关这些问题的信息,不需要或不需要诸如“使用mysql”或“为什么要这么做”之类的答案或注释,因为我没有这样做,我只想了解文件读/写使用PHP,似乎并没有找到正确的位置/文档,是的,我理解PHP并不是用这种方式处理文件的理想语言。

6
解析文件的最佳方法
我正在尝试寻找一种更好的解决方案,以对其中一些著名的文件格式进行解析,例如:EDIFACT和TRADACOMS。 如果您不熟悉这些标准,请查看Wikipedia的以下示例: 参见以下有关用于回答产品可用性请求的EDIFACT消息的示例:- UNA:+.? ' UNB+IATB:1+6XPPC+LHPPC+940101:0950+1' UNH+1+PAORES:93:1:IA' MSG+1:45' IFT+3+XYZCOMPANY AVAILABILITY' ERC+A7V:1:AMD' IFT+3+NO MORE FLIGHTS' ODI' TVL+240493:1000::1220+FRA+JFK+DL+400+C' PDI++C:3+Y::3+F::1' APD+714C:0:::6++++++6X' TVL+240493:1740::2030+JFK+MIA+DL+081+C' PDI++C:4' APD+EM2:0:130::6+++++++DA' UNT+13+1' UNZ+1+1' UNA段是可选的。如果存在,它将指定将用于解释消息其余部分的特殊字符。UNA后面有六个字符,顺序如下: 组件数据元素分隔符(在此示例中:) 数据元素分隔符(此示例中的+) 十进制通知(此示例中的。) 释放字符(此示例中的?) 保留,必须为空格 段终止符(此示例中的') 如您所见,这只是一些以特殊方式格式化的数据等待解析(非常类似于XML文件)。 现在我的系统是建立在PHP之上的,并且我能够为每个段使用正则表达式创建解析器,但是问题不是每个人都能完美地实现标准。 一些供应商倾向于完全忽略可选的细分市场和领域。其他人可能选择发送比其他人更多的数据。这就是为什么我不得不为段和字段创建验证器以测试文件是否正确。 您可以想象我现在正在遇到的正则表达式的噩梦。另外,每个供应商都需要对正则表达式进行很多修改,我倾向于为每个供应商构建一个解析器。 问题: 1-这是解析文件(使用正则表达式)的最佳实践吗? 2-是否有更好的解析文件的解决方案(也许那里有现成的解决方案)?它能否显示缺少的段或文件已损坏? 3-如果仍然要构建解析器,应该使用哪种设计模式或方法? 笔记: 我读过有关yacc和ANTLR的文章,但不知道它们是否符合我的需求!

2
我可以从哪个开放源代码PHP项目中学习“完美的” OOP设计?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我是OOP的新手,以身作则,我学得最好。 您可以说这个问题类似于我应该学习哪个Scala开源项目以学习最佳编码实践 -但使用PHP。 我曾经听说过Symfony具有最佳的“架构”(我不会假装我确切地知道这是什么意思),还有教义ORM。花数月时间阅读这些项目的源代码,试图推断出所使用的模式并学习新的技巧是否值得? 我看到相同数量的网页在分解和喜欢Zend的代码库(如果认为必要,将提供链接)。 您是否知道任何其他项目会使资深OOP开发人员流下喜悦的眼泪? 请让我补充一点,在这里根本不关心实用性和使用范围-我只想这样做: 选择一个开发人员认为比我更好,更强大的代码库的项目。 编写实现项目功能的代码。 比较结果并尝试了解我不知道的内容。 基本上是学术兴趣代码库。有什么建议吗?

4
仅使用带有两个参数的PHP三元运算符
我最近正在查看我的一些代码,并注意到由于缺乏思想,我留下了如下结构: $guid = empty($subscription->guid) ? : $subscription->guid; 现在,这没有做应该做的事情,而且是错误的,但是由于该属性始终处于设置状态,因此它可以正常工作,并且由于以下更改,自5.3以来没有语法错误: 从PHP 5.3开始,可以省略三元运算符的中间部分。如果expr1的计算结果为TRUE,则表达式expr1?:expr3返回expr1,否则返回expr3。 我当时还没有意识到这一变化,现在我很好奇是否应该使用它。这是ruby之类的语言所无法比拟的,您可以在其中a = b || c获取b或不获取c“真实”布尔值。但是,他们为三元运算符选择的语法对我来说似乎有点不直观。我应该在生产代码中使用它吗?当我偶然看到它的时候,它肯定让我感到震惊。

9
使用PHP构建大型Web应用程序时避免使用框架是否有意义?
作为PHP Web应用程序开发人员已有几年了,我分享了MVC和框架。起初我以为它们是切成薄片以来最好的东西。一切似乎都很容易实现。 但是,现在看来,应用程序越复杂,框架引入的麻烦就越多,因此我必须开发解决方法来克服它们。由于我必须深入研究框架核心代码并进行更改,以便使其按照我想要的方式运行,因此此类解决方法通常非常艰巨而复杂。 例如,在我的一个使用Slim(C)+ Idiorm(M)+ Twig(V)的项目中(我认为它非常灵活),我必须创建一个自定义函数,以便在父模板中显示动态数据。没有框架,我本可以在包含的文件中简单地执行mysql_query()。 好的,如果我要创建一个简单的公司简介网站,框架会很酷。我可以在一夜之间鞭打一些代码,它们通常在早晨准备就绪,而且我从它们那里学到的良好的编码实践和设计模式非常有价值。 但是实际上,对于像基于Web的多合一学校管理系统这样的复杂Web应用程序,框架通常会像上面的示例那样妨碍我的业务流程。 所以我的问题是:可以回到基础上,并使用标准的PHP代码和库来做下一个项目,那里可能有大量的框架和库,只要我能充分使用良好的编码习惯并遵循明智的设计模式,就可以了吗?喜欢MVC?我的开发团队很小:只有2个程序员和1个设计师。其他程序员也同意我的上述想法。

2
使用gettext翻译更长的文本(视图和电子邮件模板)
我正在开发一个多语言的PHP Web应用程序,并且有很长的文本需要用gettext进行翻译。这些是电子邮件模板(通常很短,但仍然是几行)和视图模板的一部分(较长的描述性文本块)。这些文本将包括一些简单的HTML(强调的内容如粗体/斜体,可能是此处或此处的链接)。模板是捕获其输出的PHP脚本。 问题在于,gettext对于处理较长的文本似乎非常笨拙。长文本通常会比短文本具有更多的变化-我可以更改msgid并确保在所有翻译中都进行更新(msgid较长时可能需要大量工作,并且容易出错),或者我可以保留msgid保持不变,仅修改翻译(这会在模板中留下误导的过时文本)。另外,我也看到了反对在gettext字符串中包含HTML的建议,但要避免将单个自然文本分成很多块,这将是翻译和重组的更大噩梦,并且我也看到了反对的建议将gettext字符串不必要地拆分为单独的msgids。 我看到的另一种方法是完全忽略这些较长文本的gettext,并为每个语言环境在外部子模板中分离这些块,而只为当前语言环境包括一个。缺点是我将gettext .po文件和位于完全不同位置的单独模板之间的翻译工作分开了。 由于此应用程序将来会被用作其他应用程序的起点,因此我正试图提出长期最佳的方法。在这种情况下,我需要一些最佳实践建议。您如何实施类似案例?哪些结果可行,什么却是坏主意?

9
将大型数据集插入MySQL数据库(或一般任何数据库)的最佳方法是什么
作为PHP项目的一部分,我必须在MySQL数据库中插入一行。我显然已经习惯了,但是这需要在一个查询中插入90列。产生的查询看起来很可怕且整体(特别是将我的PHP变量作为值插入): INSERT INTO mytable (column1, colum2, ..., column90) VALUES ('value1', 'value2', ..., 'value90') 我担心我的做法不正确。键入所有内容也花费了我很长的时间,而我担心编写测试代码的测试同样乏味。 专业人士如何快速编写和测试这些查询?有什么办法可以加快这个过程?
9 php  mysql  efficiency 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.