小编Tom*_*ger的帖子

在PHP中初始化(空)数组的最佳方法

在某些其他语言(例如AS3)中,已经注意到如果像这样做var foo = []而不是var foo = new Array()出于对象创建和实例化的原因,初始化新数组会更快.我想知道PHP中是否有任何等价?

class Foo {
    private $arr = array(); // is there another / better way?
}
Run Code Online (Sandbox Code Playgroud)

php arrays initialization

282
推荐指数
7
解决办法
54万
查看次数

给变量赋值的最佳方法(模拟Perl ||,|| =)

我喜欢在Perl中做这种事情:$foo = $bar || $baz分配$baz$fooif $bar是空的还是未定义的.您还可以$foo ||= $bletch将只分配$bletch$foo如果$foo没有定义或为空.

在这种情况下,三元运算符是乏味和乏味的.当然,PHP中有一个简单,优雅的方法?

或者是使用isset()的自定义函数的唯一答案?

php perl operators default-value

117
推荐指数
5
解决办法
7万
查看次数

覆盖类常量与属性

我想更好地理解为什么在下面的场景中,类常量被继承的方式与实例变量的方式不同.

<?php
class ParentClass {
    const TEST = "ONE";
    protected $test = "ONE";

    public function showTest(){
        echo self::TEST;
        echo $this->test;
    }
}

class ChildClass extends ParentClass {
    const TEST = "TWO";
    protected $test = "TWO";

    public function myTest(){
        echo self::TEST;
        echo $this->test;
    }
}

$child = new ChildClass();
$child->myTest();
$child->showTest();
Run Code Online (Sandbox Code Playgroud)

输出:

TWO
TWO
ONE
TWO
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,ChildClass没有showTest()方法,因此继承使用ParentClass showTest()方法.结果显示,由于该方法在ParentClass上执行,因此正在评估TEST常量的ParentClass版本,而因为它通过继承在ChildClass上下文中进行评估,所以正在评估ChildClass成员变量$ test.

我已经阅读了文档,但似乎没有看到任何提及这种细微差别.任何人都可以为我解释一下吗?

php oop inheritance overriding constants

91
推荐指数
2
解决办法
3万
查看次数

如何在跳过空数组项时内爆数组?

Perl join()忽略(跳过)空数组值; PHP implode()似乎没有.

假设我有一个数组:

$array = array('one', '', '', 'four', '', 'six');
implode('-', $array);
Run Code Online (Sandbox Code Playgroud)

收益率:

one---four--six
Run Code Online (Sandbox Code Playgroud)

而不是(恕我直言):

one-four-six
Run Code Online (Sandbox Code Playgroud)

有我正在寻找的行为的任何其他内置插件?或者它是一个定制的工作?

php implode

88
推荐指数
3
解决办法
4万
查看次数

在激活开发人员工具之前,使用JS的网站在IE9中不起作用

我正在开发一个复杂的网站,它充分利用了jQuery和许多脚本.在加载网站时,我的脚本都没有工作(虽然我可以确认其他脚本运行正常).除了一件事,我不会在SE上发布这样一个蹩脚的问题:

我点击F12打开开发人员工具,以便我可以调试我的问题,一切都立即完美!

更糟糕的是,如果我关闭浏览器,启动它,首先打开Dev Tools并访问该站点,一切都按预期工作.

所以我甚至无法调试这个问题因为Dev Tools修复了它!Dev Tools可以做些什么让事情发挥作用?它是否改变了UA(我做了一些jQuery.browser检测)?它对doctype有用吗?

编辑

我的所有控制台日志记录都包含在以下包装器实用程序函数中:

   function log(msg){
    if (console){
        console.log(msg);
    }
   }
Run Code Online (Sandbox Code Playgroud)

我可以尝试的任何想法或建议都会受到欢迎.如果我找到解决方案,我会在这里发布.

javascript internet-explorer-9

59
推荐指数
2
解决办法
2万
查看次数

PHP - 使用大量参数和默认值初始化对象的最佳方法

我正在设计一个类,它定义了一个高度复杂的对象,其中包含大量可选参数(50+),其中许多参数都有默认值(例如:) $type = 'foo'; $width = '300'; $interactive = false;.我正在尝试确定设置构造函数和实例/类变量的最佳方法,以便能够:

  • 让这个课程变得简单易用
  • 使类自动记录变得容易(即:使用phpDocumentor)
  • 优雅地编码

鉴于上述情况,我不想让构造函数传递大量的论据.我将传递一个包含初始化值的哈希,例如:$foo = new Foo(array('type'=>'bar', 'width'=>300, 'interactive'=>false));

在编写课程方面,我仍然觉得我宁愿......

class Foo {
    private $_type = 'default_type';
    private $_width = 100;
    private $_interactive = true;

    ...
}
Run Code Online (Sandbox Code Playgroud)

...因为我相信这将有助于文档生成(您可以获得类属性的列表,这可以让API用户知道他们必须使用的'选项'),并且"感觉"就像正确的方法一样它.

但是你遇到了将构造函数中的传入参数映射到类变量的问题,并且在没有利用符号表的情况下,你进入了一种"暴力"的方法,这让我无法实现目的(尽管我对其他人开放)意见).例如:

function __construct($args){
    if(isset($args['type'])) $_type = $args['type']; // yuck!
}
Run Code Online (Sandbox Code Playgroud)

我考虑过创建一个单独的类变量,它本身就是一个关联数组.初始化这将非常简单,例如:

private $_instance_params = array(
    'type' => 'default_type',
    'width' => 100,
    'interactive' => true
);

function __construct($args){
    foreach($args as $key=>$value){
        $_instance_params[$key] = $value;
    }
}
Run Code Online (Sandbox Code Playgroud)

但这似乎我没有利用私有类变量等本机功能,而且感觉文档生成不适用于这种方法.

感谢您阅读这篇文章; 我可能在这里问了很多,但我是PHP的新手,我真的只是寻找这种惯用/优雅的方式.你最好的做法是什么?


附录(有关此特定班级的详细信息) …

php constructor idioms class instantiation

30
推荐指数
2
解决办法
1万
查看次数

NetBeans 7.x和Subversion 1.7.1

在升级到最新的TortoiseSVN并检查了一个repo后,NetBeans抱怨没有正确版本的SVN客户端.没问题,我下载的Win32SVN是1.7.0(乌龟是1.7.1,但这应该不是问题).

然后,在NetBeans中,我使用工具>选项>版本控制> Subversion将其指向subversion二进制文件.没有快乐.

每当我在NB中打开我的项目时,我都会收到一个可怕的警告DB告诉我,我需要降级我的仓库或升级我的SVN客户端.

我错过了哪些步骤?我不愿意降级我的TortoiseSVN,所以如何将NB带到鼻烟?

svn netbeans

22
推荐指数
2
解决办法
2万
查看次数

创建一个适用于iOS Safari的"粘性"固定位置项

在iOS Safari中,单指平移在用户停止平移之前不会生成任何事件.仅当页面停止移动并重新绘制时才会生成onscroll事件.

我需要一种方法来检测实时滚动.具体来说,我想制作一个也适用于iOS Safari的粘性菜单.在非移动浏览器上,粘贴菜单可以通过在听取onscroll事件时在元素上的"position relative"到"position fixed"之间切换来完成.此方法不适用于移动浏览器,因为不会连续触发onscroll事件.我能做什么?

javascript onscroll ios

18
推荐指数
1
解决办法
2万
查看次数

记录javascript库依赖项的最佳实践

因此,您在外部.js文件中创建了一堆代码,该文件需要jQuery及其一些插件,或MooTools,或者可能是一些更深奥的库.显然,当你在每个脚本中加载时,实际的"include"是在HEAD部分的主机HTML页面中完成的.

但作为可移植性的最佳实践,您的JavaScript .js文件中存在哪些内置功能或广泛采用的约定,以确保使用您的代码的下一个schmoe还记住还包括其他所需的库?

我正在寻求开发者社区的一些共识,所以请务必投票选出最常见的或您最熟悉的答案.

javascript dependencies conventions

15
推荐指数
2
解决办法
1959
查看次数

如何将数组或对象数组转换为关联数组?

我习惯了perl的map()函数,其中回调可以分配键和值,从而创建一个关联数组,其中输入是一个平面数组.我知道array_fill_keys()如果您只想创建一个字典样式的哈希,哪个可能很有用,但是如果您不一定希望所有值都相同呢?显然所有事情都可以通过foreach迭代来完成,但是还有其他(可能更优雅)的方法吗?

编辑:添加一个示例来阐明转换.请不要挂断转换,问题是将平面列表转换为哈希值,我们不能假设所有值都是相同的.

$original_array: ('a', 'b', 'c', 'd')
$new_hash: ('a'=>'yes', 'b'=>'no', 'c'=>'yes', 'd'=>'no')

*note: the values in this example are arbitrary, governed by some business logic that is not really relevant to this question. For example, perhaps it's based on the even-oddness of the ordinal value of the key
Run Code Online (Sandbox Code Playgroud)

实际示例 因此,使用此处提供的答案,以下是如何解析$ _POST以获取仅列出与给定条件匹配的输入字段的列表.这可能很有用,例如,如果表单中有很多输入字段,但必须同时处理它们中的某些组.

在这种情况下,我有许多输入字段,表示数据库的映射.每个输入字段如下所示: <input name="field-user_email" value="2" />其中每种类型的字段都以"field-"为前缀.

我们想要做的是,首先,获取实际以"field-"开头的那些输入字段的列表,然后我们要创建一个名为的关联数组$mapped_fields,其中提取的字段名称作为键,实际输入字段的值作为价值.

$mapped_fields = array_reduce( preg_grep( '/field-.+/', array_keys( $_POST ) ), function( $hash, $field ){ $hash[substr( $field, 6 )] …
Run Code Online (Sandbox Code Playgroud)

php array-map

15
推荐指数
1
解决办法
1万
查看次数