我对PHP比较陌生,慢慢学习特定于语言的特性.有一件事我得到了很大的好处,那就是我(所以我被告知)使用了太多的函数调用,并且我被要求做一些事情来解决它们.这是两个例子:
// Change this:
} catch (Exception $e) {
print "It seems that error " . $e->getCode() . " occured";
log("Error: " . $e->getCode());
}
// To this:
} catch (Exception $e) {
$code = $e->getCode();
print "It seems that error " . $code . " occured";
log("Error: " . $code);
}
Run Code Online (Sandbox Code Playgroud)
第二个例子
// Change this:
$customer->setProducts($products);
// To this:
if (!empty($products)) {
$customer->setProducts($products);
}
Run Code Online (Sandbox Code Playgroud)
在第一个例子中,我发现$e->getCode()为$code广告分配一个轻微的认知开销; "什么是'$ code'?啊,这是异常的代码." 而第二个例子增加了圈复杂度.在这两个例子中,我发现优化是以可读性和可维护性为代价的.
性能提升是值得的,还是微观优化?
我应该注意到,我们现在仍然坚持使用PHP 5.2.
我做了一些非常粗略的基准测试,发现函数调用性能命中率在10%到70%之间,具体取决于我的工作台测试的性质.我承认这很重要.但在该catch块被击中之前,有一个数据库和HTTP端点的调用.在$products设置之前,$customer …
javascript文件如何知道它位于何处?例如:
<script type="text/javascript" src="http://mysite.com/scripts/howdy.js"></script>
Run Code Online (Sandbox Code Playgroud)
如何howdy.js知道代码http://mysite.com/scripts/howdy.js?
编辑:澄清.我不能依赖于在DOM中搜索我的脚本标记,因为我需要在DOM准备好之前了解它.
是否有使用JSTL创建带导航链接的菜单的库或最佳实践方法?
我每页都有5个链接.我希望指向当前页面的链接被"禁用".我可以手动执行此操作,但这必须是人们之前处理过的问题.如果有一个taglib处理它但我不知道它,我不会感到惊讶.
我们在Squid代理后面有一个带有Spring Security的Spring 3应用程序.问题是Spring只知道内部squid url,所以在成功登录后,example.com/login而不是重定向到example.com/home它重定向到internal.example.com.
有谁知道如何处理这种情况?
我的配置:
<security:http use-expressions="true" auto-config="true">
<security:intercept-url pattern="/" access="hasRole('ROLE_ANONYMOUS') or hasRole('ROLE_GENERAL_ADMINISTRATION')"/>
<security:intercept-url pattern="/**" access="hasRole('ROLE_GENERAL_ADMINISTRATION')"/>
<security:intercept-url pattern="/static/**" filters="none"/>
<security:logout invalidate-session="true" logout-url="/logout" logout-success-url="/"/>
<security:form-login login-page="/" default-target-url="/dashboard"/>
<security:anonymous/>
</security:http>
Run Code Online (Sandbox Code Playgroud)
在我的情况下,管理员已经错误地设置了mod_jk所以一切都很好用鱿鱼和上面的配置.
我可以在IndexedDB中的对象库之间创建关系吗?
例如,我有两个对象存储:artist和album.与一个人artist有一对多的关系album.album.artistId将专辑与...联系起来artist.id.
我在想Hibernate.我愿做一个艺术家查询,并有属于返回称为数组艺术家的专辑artists中的album对象.
artist.albums = [];
Run Code Online (Sandbox Code Playgroud)
下面有一些很好的答案可以很好地回答这个问题.我想补充一点,我最初试图将IndexedDB用作关系存储,并在其上构建类似ORM的解决方案,但它并不适合.IndexedDB是一个NoSQL数据库,因为我开始以这种方式处理它,它更有意义,我的项目更容易管理.我希望这为那些不断遇到它的人增加一些原始问题的价值.
@RequestBody使用Spring Security 获得安全保障的正确方法是什么?
例如:A User可以有多个Blogs,每个Blog可以有多个Entrys.用户去保存某个博客的条目,请求会像这样:
@RequestMapping(value="/api/entry", method=RequestMethod.POST)
@ResponseBody
public Entry save(@Valid @RequestBody Entry entry) {
this.entryService.save(entry);
return entry;
}
Run Code Online (Sandbox Code Playgroud)
现在,传入entry有一个Blog,用户可以篡改请求并选择其他人的博客,有效地将条目发布到他们的博客.虽然我可以在验证中捕获这个(查询持久层以验证Blog属于登录的User)我觉得这应该由Spring Security处理.如果是这样,我该怎么做呢?
可以说我有一个方法:
public function createFoo(Foo $foo, $isPremiumFoo=false);
Run Code Online (Sandbox Code Playgroud)
$isPremiumFoo事后看来,把这个标志争论挂在最后有点愚蠢。所以我们将其移入Foo,现在我想将其从方法签名中删除。但我不想一次完成所有这一切,因为这是一个公共方法并且已经在野外使用。我想@deprecate提醒用户他们应该停止使用它,然后最终删除它。既然不能在 PHP 中重载方法,那么我如何才能仅弃用该方法参数而不是整个方法呢?
你们如何处理IndexedDB中的多对多关系?
例如,假设我有一个Blog对象来保存博客帖子和一个Tag用于博客帖子的标签/标签的对象.一个Blog可以有很多Tags,一个Tag可以被许多人使用Blog.
我会创建一个blog store和tag store(虽然我愿意接受建议)来容纳两种类型的对象:
// ...
var blogStore = db.createObjectStore("blog", {keyPath: "blogId", autoIncrement: true});
blogStore.createIndex("title", "title", {unique: true});
var tagStore = db.createObjectStore("tag", {keyPath: "tagId", autoIncrement: true});
tagStore.createIndex("label", "label", {unique: true});
Run Code Online (Sandbox Code Playgroud)
我可以想到两种方法将两者联系起来:
Blog.tags的数组,BlogTag它包含blogId和tagId(并且也可以在商店中进行检索)或Blog.tags数组.tagIdTag第一种方式似乎更长,但是如何在SQL中解决这个问题.那只是我应该留下的SQL包袱吗?
我想第三种方法是Blog.tags成为一个Tags 数组.这似乎最简单,但后来我无法Tag在博客中查询s或重用标签(或者我可以吗?).
有没有其他人使用indexedDB处理这种情况?如果是这样,你最终做了什么?有什么陷阱?
我最近不得不解决遗留 PHP 应用程序中的错误。此应用程序接收来自另一个应用程序的请求,其 JSON 格式为:
{
"someList": [
"item A",
"item B"
],
"ratings": {
"0": 0.001234,
"1": 0.0666,
"2": 0.09876,
"3": 0.777777
}
}
Run Code Online (Sandbox Code Playgroud)
当它反序列化为原生 PHP “关联数组”时,列表和映射(键为 0、1、2 和 3)看起来都像列表。没关系,我可以解决这个问题。但是,此应用程序会对此数据进行计算,并在以大致相同的格式将其序列化回 JSON 并将其发送到另一个应用程序之前对其进行更多计算。这就是问题所在。json_encode($data)上述结果的开箱即用:
{
"someList": [
"item A",
"item B"
],
"ratings": [
0.001234,
0.0666,
0.09876,
0.777777
]
}
Run Code Online (Sandbox Code Playgroud)
我的钥匙都没了...
我看到我可以使用JSON_FORCE_OBJECTlaecho json_encode($data, JSON_FORCE_OBJECT)但后来我得到:
{
"someList": {
"0": "item A",
"1": "item B"
},
"ratings": {
"0": 0.001234,
"1": 0.0666,
"2": 0.09876,
"3": 0.777777
} …Run Code Online (Sandbox Code Playgroud) 有没有人知道搜索mercurial存储库的解决方案?(我们目前正在使用hgweb托管我们的存储库.)我们希望能够搜索过去的源代码修订版.例如,找出何时可能引入了一个bug.
Fisheye看起来很适合这个账单,但该公司不愿意付钱.是否有任何开源替代品或其他解决方案可以让我们在hg中搜索源历史记录?
一个理想的解决方案将允许我们:
谢谢!
我需要忽略POJO中的某些字段,因为它们是延迟加载的和/或在某些情况下创建无限递归(父对齐的一对多Childs,Child多对一父对象).我的POJO驻留在另一个不知道Jackson,JSON等的jar中.
如何在不使用注释的情况下有效地告诉Jackson忽略这些字段?通过配置将是最好的.
谢谢
如何更新Google可视化数据表中的数据?例:
var data = new google.visualization.DataTable();
data.addColumn('string', 'Name');
data.addColumn('string', 'Occupation');
data.addRow(['Bob', 'Shoe Wearer']);
data.addRow(['Henry', 'Transformer']);
data.addRow(['Betty', 'Seltzer Connoisseur']);
// Time passes and Bob changes jobs:
data.addRow(['Bob', 'Beach Comber']);
Run Code Online (Sandbox Code Playgroud)
当然,这增加了一个新行,现在我有两个Bobs.我怎样才能更新鲍勃的职业?