Questions tagged «php»

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

3
对使用Web服务的基于桌面的客户端进行脱机故障转移的最佳方法是什么?
我有三个共享相同问题的新项目: 他们需要在Web系统上具有逻辑,并且他们需要通过RESTful Web服务与此类系统进行通信的本地应用程序(例如销售点)。 我的解决方案 我设法提出的解决方案是在桌面应用程序消息队列中实现,以在服务离线时存储操作,更准确地说是异步消息队列。但是,这很容易(如果这是最佳解决方案)。我还关注数据同步和冲突解决。 主要系统必须基于Web,因为利益相关者需要使用Web应用程序来进行报告和监视,并且Web服务将处理多个机构的请求。 桌面客户端(最好是瘦客户端)将使用Java(更具体地讲是Netbeans)实现,而Web系统将使用Symfony2实现。其中两个项目需要客户端进行硬件集成,因此使用Web技术制作桌面应用程序(例如Appcelerator Titanium)可能会很麻烦。 我的问题 什么是可扩展的更好解决方案,这意味着以最小的努力获得最高的效率(最好没有额外的成本,例如购买备用服务器进行本地操作)? 以前还有谁处理过?您是如何解决您的问题的?您可以分享什么课程? 您如何处理同步? 编辑:在第3点中向我的问题添加了缺失的部分

2
静态是不好的,但是工厂模式呢?
我正在进行TDD项目,所以我尝试尽可能地坚持与这种开发相关的良好实践。其中之一是尽可能避免静态和全局。 我面临着这个问题:我有一个对象“文章”,可以将其链接到“选项”(附加的“微型文章”)。 我无法弄清楚如何拥有一种不会产生反效果或产生过多查询的好的方法,因为我将处于一种一切都分离的情况下,我基本上将需要对每个对象进行一次查询。 从我的实际角度来看,我看到3个选项: 1)构建内部文章: class Article { //[...] public function getArrOption(){ //Build an array of Options instance. //return an array of Options. } } 优点:直截了当 const:可维护性:article对象现在包含Option对象的构建逻辑。这可能会导致代码重复。 2)使用optionFactory class Article { //[...] public function getArrOption(){ return OptionFactory::buildFromArticleId($this->getId()); } } 优点:构建逻辑并非超出Article类 const:我违反了“静态很难模拟”的规则,这使得我的Article类很难测试。 3)分离所有逻辑。 //Build the array of Option instance in a …
13 php  tdd  static-access 

4
在PHP的魔术方法的上下文中,“ trigger_error”与“ throw Exception”
我正在与一位同事trigger_error就魔术方法上下文中的正确用法(如果有)进行辩论。首先,我认为除了这种情况外,trigger_error应该避免这种情况。 说我们有一类的方法 foo() class A { public function foo() { echo 'bar'; } } 现在说我们想提供完全相同的接口,但是使用魔术方法来捕获所有方法调用 class B { public function __call($method, $args) { switch (strtolower($method)) { case 'foo': echo 'bar'; break; } } } $a = new A; $b = new B; $a->foo(); //bar $b->foo(); //bar 这两个类的响应方式相同,foo()但在调用无效方法时有所不同。 $a->doesntexist(); //Error $b->doesntexist(); …

5
在您的服务器上安装Mercurial并进行hg pull部署是个好主意吗?
过去一个月,我刚刚开始一份新工作,看起来他们没有代码的源代码控制。他们依靠其托管服务提供商为其提供的备份。 经过一番交谈后,我说服了老板我们绝对应该使用源代码控制,并且在我进行了简短的研讨会之后,整个团队都加入了。他们喜欢水星。 所以现在这就是我们的工作方式: º----------BitBucket º---------/ º--------/ 我自己和hg pullBitBucket的其他三个开发人员进行了更改,然后更改hg push为BitBucket。 现在进行部署时,需要有人将最新文件通过FTP传输到生产服务器。 我当时正在考虑在我们的服务器上安装Mercurial,并使用hg clone(随后使用hg pull)使版本保持最新状态。 º---push->-----BitBucket----<-pull-----º (production server) º---push->----/ º---push->---/ 这是一个好主意吗?我可能没有看到任何潜在的陷阱?这里有人做过类似的事情吗?您如何部署大型PHP框架应用程序(我们正在使用Moodle)?

2
为什么PHP变量需要以美元符号开头?
我知道所有PHP变量都必须以美元符号开头(例如$someValue = 1),但是为什么会这样呢?为什么要做出这种设计选择? 我问的原因是我的女朋友问为什么当我提到PHP变量需要以美元符号开头时,我意识到我不知道为什么要选择这种语法。 有任何想法吗?
13 php  syntax 

3
组成重于继承,但
我试图自学软件工程,遇到一些使我感到困惑的冲突信息。 我一直在学习OOP,以及什么是抽象类/接口以及如何使用它们,但是随后我读到,应该“偏重于继承而不是继承”。我知道组合是指一个类组成/创建另一个类的对象以利用/与该新对象的功能交互。 所以我的问题是...我应该不使用抽象类和接口吗?是否不创建抽象类并在具体类中扩展/继承该抽象类的功能,而是仅编写新对象以使用其他类的功能? 或者,我应该使用组合并从抽象类继承吗?两者结合使用?如果是这样,您能否提供一些示例,说明其工作方式及其好处? 因为我最熟悉PHP,所以在继续使用其他语言并转移我新获得的SE技能之前,我正在使用它来提高OOP / SE技能,因此,使用PHP的示例非常受赞赏。

3
依赖注入:在什么时候可以创建一个新对象?
我正在重构PHP应用程序,并且我试图做的是尽可能多的依赖项注入(DI)。 我觉得我已经很好地了解了它的工作原理,而且我当然可以看到我的课程变得更加精简和强大。 我进行重构,以便可以在类中注入依赖关系而不是创建一个新对象,但是在某些时候,我将不得不创建一些对象,即使用dreaded new关键字。 我现在遇到的问题是我实际上可以在什么时候创建新对象?看起来我将结束于顶级课程,创建大量新对象,因为没有其他可去之处。这感觉不对。 我读过一些使用工厂类创建所有对象的博客,然后将工厂注入其他类中。然后,您可以调用工厂方法,然后工厂为您创建新对象。 我担心的是,现在我的工厂班将new全部免费!我猜这是工厂类的方法,这可能是可以的,但是使用工厂模式和DI时是否要遵守一些规则,还是我在这里偏离了常规?

2
在类上声明字段实际上在PHP中有害吗?
考虑下面的代码,由于我过去几次实际犯的普通编程错误,故意将设置器破坏了: <?php class TestClass { private $testField; function setField($newVal) { $testField = $newVal; // deliberately broken; should be `$this->testField = $newVal` } function getField() { return $this->testField; } } $testInstance = new TestClass(); $testInstance->setField("Hello world!"); // Actually prints nothing; getField() returns null echo $testInstance->getField(); ?> 我$testField在类的顶部声明的事实有助于隐藏我的编程错误。如果我没有声明该字段,那么在调用此脚本时,我会在错误日志中得到类似于以下警告的信息,这可能对帮助调试非常有价值-特别是如果我要在这样的错误中进行操作大型复杂的实际应用程序: PHP注意:未定义的属性:第13行的/var/www/test.php中的TestClass :: $ testField …
13 php 

2
我如何才能充分利用自己的编码技能?
到今年秋天,我的两个小型网站每月的最低/零投入应该总计约为1200美元,这足以让我过上舒适的生活。 我宁愿花几年的时间做一些真正好的事情,也可以帮助需要它的其他人,而不愿从事另一项业务。我想花4到5年的时间将自己的时间用于有价值的事业,并尽我所能来帮助我掌握已有的Web开发和编程技能。 问题是我不知道从哪里开始。我对自己的想法并不了解,并且对许多大型慈善机构表示怀疑。理想情况下,我想找到一个小型项目,每个人都没有薪水,专注于帮助。 有没有这么小的组织? 是否有人想出一个项目/网站/应用程序的想法,可以帮助有需要的人希望他们与我合作或与他们合作? 我知道这不是典型的StackOverflow 2 + 2 =?类型问题,有些人会很想删除它,但考虑到IT行业的慈善性质(仅看SO本身),这对于现在或在职业生涯中的许多开发人员来说都是非常相关的问题。考虑到日本最近发生的事件,这个问题与许多寻求与他人分享技能和时间来帮助他人的人特别相关。 真的很期待阅读您的想法/答案,谢谢大家
13 c#  java  php  javascript  jquery 

5
微型重构代码以提高质量是否有用,还是只是“移动代码”而没有太多好处?
例 我遇到了在一个地方完成所有工作的整体代码-从数据库加载数据,显示HTML标记,充当路由器/控制器/动作。我开始应用SRP将数据库代码移动到其自己的文件中,从而为事物提供了更好的命名,而且看起来都不错,但是随后我开始怀疑为什么要这样做。 为什么要重构?什么目的?它没用吗?有什么好处?请注意,我基本上保留了整体文件,但只重构了与需要进行某些工作的区域相关的较小部分。 原始代码: 举一个具体的例子,我遇到了以下代码片段-它通过已知的产品ID或用户选择的版本ID加载产品规格: if ($verid) $sql1 = "SELECT * FROM product_spec WHERE id = " . clean_input($verid); else $sql1 = "SELECT * FROM product_spec WHERE product_id = " . clean_input($productid) ; $result1 = query($sql1); $row1 = fetch_array($result1); /* html markup follows */ 重构: 由于我正在做一些工作,要求我在代码的此特定部分中进行更改,因此我将其更改为使用存储库模式,并将其升级为使用面向对象的MySQL工具: //some implementation details omitted …


5
关于Web开发角色的服务器,我需要了解什么?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 我知道这听起来可能有点含糊,所以我将尝试进一步解释... 在从事自营开发人员多年之后,我现在正在寻找商业Web开发人员。我对服务器和托管的唯一经验是通过FTP上传并使用CPanel / WHM。我要使用的角色是Web开发PHP,MySQL,HTML,CSS类型角色,但是在最近的采访中,有人问我有关在服务器上进行设置的问题,我不知道在说什么...这不理想! 在不了解更多信息的情况下,很难解释我到底想学什么,但是基本上,这只是我作为Web开发人员应该知道的服务器元素?如果您是Web开发人员,除了上载文件之外,您还可以处理服务器吗?Web开发团队是否经常设置诸如Subversion(SVN)和版本控制系统之类的东西,这就是他们所说的吗?

2
如何临时保存查询结果,以用于另一个?
我有这个问题,我想您可能会帮助我。 PS:我不确定如何称呼它,所以如果有人找到一个更合适的标题,请进行编辑。 背景 我正在使用此应用程序搜索公交线路。 总线是3位数字,并且是唯一的,永远不会改变。 要求是能够搜索从站点A到站点B的线路。 用户界面已经成功提示用户仅使用有效的站点名称。 要求是能够显示一条路线是否有一条直线,如果没有,则显示2条甚至3条线的组合。 例: 我需要从A点到达D点。该程序应显示: 如果有一条直线AD。 如果不是,则显示2行组合,例如AC,CD。 如果没有任何2行组合,请搜索3行组合:AB,BC,CD。 当然,该应用程序应显示总线线路号以及何时切换总线。 是)我有的: 我的数据库结构如下(简化后,实际的数据库包括位置和时间等信息): +-----------+ | bus_stops | +----+------+ | id | name | +----+------+ +-------------------------------+ | lines_stops_relationship | +-------------+---------+-------+ | bus_line | stop_id | order | +-------------+---------+-------+ 在哪里lines_stops_relationship描述公交线路和车站之间的多对多关系。 顺序,表示止损单行显示的顺序。并非所有的行都来回移动,并且顺序具有含义(顺序2的A点在顺序1的B点之后)。 问题 我们找出一条线是否可以轻松通过该路线。只需搜索一条以正确顺序穿过两个点的直线。 如何找到2/3线组合?我当时想搜索一条与源站点相匹配的线,与目标站点相匹配的线,以查看是否可以在它们之间找到一个公共站点,以便用户可以切换公交车。我怎么记得那站? 3行组合更加棘手,我找到了一条线作为源,一条线用于目的地,然后呢?我想搜索一条有2个停靠点的线,但是,我又如何记住停靠点? tl; dr 我如何记住查询结果才能再次使用?我希望在单个查询中实现此目的(对于每个查询,都是针对1行路线的查询,针对2行的查询以及针对3行组合的查询)。 注意:我不介意有人建议使用与我完全不同的方法,我愿意接受任何解决方案。 …
12 php  mysql  routing 

3
使用MVC时处理PHP中的错误
我最近一直在使用Codeigniter,但令我不安的是处理错误并将错误显示给用户。我从来没有擅长处理错误,而不会变得凌乱。我主要关心的是何时将错误返回给用户。 使用异常和抛出/捕获异常,而不是从函数返回0或1,然后使用if / else处理错误,是一种好习惯吗?因此,使得更容易通知用户该问题。 我倾向于避开例外。几年前,我在大学的Java导师告诉我:“不应在生产代码中使用异常,它应该更多地用于调试”。我感到他在撒谎。 但是,举例来说,我有将用户添加到数据库中的代码。在此过程中,可能有不止一件事情出错,例如数据库问题,重复条目,服务器问题等。注册期间发生问题时,用户需要了解它。 记住我正在使用MVC框架,是处理PHP错误的最佳方法是什么。


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.