小编Nik*_*kiC的帖子

在PHP中导入类和命名空间:领先的反斜杠有什么区别?

这两者有什么区别:

use Exception;
use \Exception;
Run Code Online (Sandbox Code Playgroud)

或那些:

use Foo\Bar;
use \Foo\Bar;
Run Code Online (Sandbox Code Playgroud)

手册说:

请注意,对于名称空间名称(包含名称空间分隔符的完全限定名称空间名称,例如Foo\Bar而不是全局名称,例如FooBar),前导反斜杠是不必要的,不允许,因为导入名称必须是完全限定的,并且不会相对于当前名称空间进行处理.

但我并不是真的理解这一点,因为所有上述变种都有效,即它绝对不是"不允许".

看看zend_do_use显示,is_global(设置,当有前导反斜杠时)仅用于以下情况中的警告:

namespace {
    use Exception;
}
Run Code Online (Sandbox Code Playgroud)

这告诉我:"具有非复合名称的'使用声明'异常'无效".(虽然做同样的事情use \Exception会产生很小的影响,但不会发出警告.)

那么:我错过了什么吗?实际上有什么区别吗?

php import namespaces language-specifications

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

使用正则表达式(PCRE)匹配a ^ nb ^ nc ^ n(例如"aaabbbccc")

众所周知,现代正则表达式实现(最值得注意的是PCRE)与常规语法的原始概念几乎没有共同之处.例如,您可以解析无上下文语法的经典示例{a n b n ; n> 0}(例如aaabbb)使用此正则表达式(演示):

~^(a(?1)?b)$~
Run Code Online (Sandbox Code Playgroud)

我的问题是:你能走多远?是否也可以使用PCRE 解析上下文敏感的语法 {a n b n c n ; n> 0}(例如aaabbbccc)?

php regex pcre

42
推荐指数
4
解决办法
6232
查看次数

JQuery Checkbox Treeview

我正在寻找一个JQuery Checkbox Treeview.有谁知道一个好的存在吗?

treeview jquery jquery-plugins

36
推荐指数
3
解决办法
7万
查看次数

许多哈希迭代:每次都附加盐?

我已经长时间使用了无盐的md5/sha1,但由于这种方法不太安全(并且随着时间的推移变得越来越不安全)我决定切换到盐渍的sha512.此外,我想通过使用许多迭代(例如100)来减慢散列的生成.

我的问题是我是应该在每次迭代时添加盐还是在开始时只添加一次.以下是两个可能的代码:

每次追加:

// some nice big salt
$salt = hash($algorithm, $salt);

// apply $algorithm $runs times for slowdown
while ($runs--) {
    $string = hash($algorithm, $string . $salt, $raw);
}

return $string;
Run Code Online (Sandbox Code Playgroud)

追加一次:

// add some nice big salt
$string .= hash($algorithm, $salt);

// apply $algorithm $runs times for slowdown
while ($runs--) {
    $string = hash($algorithm, $string, $raw);
}

return $string;
Run Code Online (Sandbox Code Playgroud)

我首先想要使用第二个版本(追加一次)但后来发现每次添加盐的一些脚本.

所以,我想知道每次添加它是否会增加哈希的强度.例如,攻击者是否有可能找到一种聪明的方法来创建一个100XSha512函数,这比简单地执行sha512 100倍?

php security passwords cryptography

36
推荐指数
2
解决办法
5942
查看次数

为什么PHP函数调用*如此*昂贵?

PHP中的函数调用很昂贵.这是一个测试它的小基准:

<?php
const RUNS = 1000000;

// create test string
$string = str_repeat('a', 1000);
$maxChars = 500;

// with function call
$start = microtime(true);
for ($i = 0; $i < RUNS; ++$i) {
    strlen($string) <= $maxChars;
}
echo 'with function call: ', microtime(true) - $start, "\n";

// without function call
$start = microtime(true);
for ($i = 0; $i < RUNS; ++$i) {
    !isset($string[$maxChars]);
}
echo 'without function call: ', microtime(true) - $start;
Run Code Online (Sandbox Code Playgroud)

这使用函数first(strlen)测试功能相同的代码,然后不使用函数(isset不是函数).

我得到以下输出:

with function …
Run Code Online (Sandbox Code Playgroud)

php function

35
推荐指数
2
解决办法
8892
查看次数

如何在symfony2中测试服务?

由于我正在使用服务,这个问题可能最终成为symfony中依赖注入的问题.目前我正试图通过phpunit测试在我的服务中测试一个简单的功能,我不断收到以下错误:

PHP Catchable fatal error:  Argument 1 passed to Caremonk\MainSiteBundle\Tests\Services\GeoTest::__construct() must be an instance of Caremonk\MainSiteBundle\Tests\Services\Geo, none given, called in /usr/share/nginx/html/caremonk/vendor/phpunit/phpunit/PHPUnit/Framework/TestSuite.php on line 473 and defined in /usr/share/nginx/html/caremonk/src/Caremonk/MainSiteBundle/Tests/Services/GeoTest.php on line 14
Run Code Online (Sandbox Code Playgroud)

从错误中可以看出,我正在尝试创建我的服务实例并且没有传递正确的参数,所以bellow是我的services.yml文件:

#src/Caremonk/MainSiteBundle/Resources/config/services.yml
parameters:
    caremonk_main_site.geo.class: Caremonk\MainSiteBundle\Services\Geo
    caremonk_main_site.geo_test.class: Caremonk\MainSiteBundle\Tests\Services\GeoTest

services:
    geo:
        class: %caremonk_main_site.geo.class%
        arguments: []

    geo_test:
        class: %caremonk_main_site.geo_test.class%
        arguments: ["@geo"]
Run Code Online (Sandbox Code Playgroud)

贝娄是我建立的服务:

<?php
//src/Caremonk/MainSiteBundle/Services/Geo.php
namespace Caremonk\MainSiteBundle\Services;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;

class Geo extends Controller
{

    public $pi80;
    public $latRad;
    public $lngRad;

    public function __construct()
    {
        $this->pi80 = M_PI / 180;
    }

    // …
Run Code Online (Sandbox Code Playgroud)

php web-services dependency-injection symfony

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

OutOfRangeException与OutOfBoundsException

PHP 为无效密钥定义了两个SPL异常:

OutOfRangeException:请求非法索引时抛出异常.这表示应该在编译时检测到的错误.

OutOfBoundsException:如果值不是有效键,则抛出异常.这表示在编译时无法检测到的错误.

由于PHP不是编译语言,编译时和运行时之间的区别似乎很奇怪,因此我发现很难理解使用哪个例外.

目前我的理解是,一个人应该抛出...
... OutOfRangeException如果关键是从根本上和本质上畸形,例如,如果一个数组作为重点过去了.
... OutOfBoundsException如果密钥通常没问题,但不在某些边界,例如,如果100通过但是50是最大密钥.

这种理解是否正确?

php spl exception

33
推荐指数
2
解决办法
8674
查看次数

如何在PHP中发送状态代码,而不维护状态名称数组?

我想要做的就是404从PHP 发送状态代码 - 但是以通用的方式.双方Router::statusCode(404)Router::statusCode(403)应工作,以及任何其他有效的HTTP状态代码.

我知道,您可以将状态代码指定为第三个参数header.可悲的是,这只有在你指定一个时才有用string.因此,呼吁header('', false, 404)没有工作.

此外,我知道,可以通过header状态行的呼叫发送状态代码:header('HTTP/1.1 404 Not Found')

但要做到这一点,我必须Not Found为所有状态代码(404)维护一系列原因短语().我不喜欢这个想法,因为它在某种程度上是PHP已经完成的重复(对于第三个header参数).

所以,我的问题是:有没有简单而干净的方式在PHP中发送状态代码?

php header http-status-codes

32
推荐指数
3
解决办法
7万
查看次数

PHP的架构限制是什么?

我正在阅读杰夫阿特伍德的文章"PHP糟透了,但它并不重要".

他在评论中写道:

也就是说,我绝对认为PHP开发人员必须了解PHP的架构限制,并了解其他选择.

这些限制是什么?它们与其他脚本/弱类型语言相比如何?

此外,在需要避免限制的情况下,有哪些替代方案?

php architecture

32
推荐指数
4
解决办法
7328
查看次数

完全销毁会话的最佳方法 - 即使浏览器未关闭

这够了吗?

session_start();   //  Must start a session before destroying it

if (isset($_SESSION))
{
    unset($_SESSION);
    session_unset();
    session_destroy();
}
Run Code Online (Sandbox Code Playgroud)

当用户Log out从菜单中选择但不退出浏览器时?我想完全删除会话的所有存在和$_SESSION

php

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