小编quo*_*tor的帖子

在PHP中超类的静态方法中访问子类的静态属性的正确方法是什么?

说我有以下内容:

<?php
abstract class MyParent
{
    public static $table_name;

    public static get_all(){
        return query("SELECT * FROM {$this->table_name}");
    }

    public static get_all2(){
        return query("SELECT * FROM ".self::table_name);
    }
}

class Child extends MyParent
{   public static $table_name = 'child'; }
?>
Run Code Online (Sandbox Code Playgroud)

假设query已正确定义,这些方法都不能满足我的要求:get_all()抛出Fatal error: Using $this when not in object context in /path/to/foo.php on line xx因为$this是实例变量.

并且get_all2()抛出Fatal error: Undefined class constant 'table_name' in /path/to/foo.php on line xx因为self是静态确定的.

好像这种事情是继承的全部意义,所以应该尽可能地至少容易,如果不武.(毕竟这是PHP.)

什么应该我做?

php inheritance class

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

比较elisp中的两个数字列表?

所以,我可以这样做(使用cl):

(loop for x in my-list
      for y in my-other-list
      if (> x y) return t
      if (< x y) return nil)
Run Code Online (Sandbox Code Playgroud)

但我真的觉得这应该很容易(list> my-list my-other-list)但我绝对没有证据表明这个功能存在任何名称.事实上,我甚至不能找到比较列出任何一般的文件在所有.这让我觉得我必须遗漏一些东西.

我是否已经对(list>)自己进行了定义,或者在我的匆忙和困惑中错过了大量的文档?

如果我必须自己定义,你能做得更好吗?我不是一个elisp黑客.

emacs elisp

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

Virtualenvwrapper.sh函数在bash shell中不可用

我正在做一个virtualenvwrapper的新安装,由于某种原因,在运行virtualenvwrapper.sh后,它的功能不可用.

$ virtualenvwrapper.sh
creating.....
$ workon
workon: command not found
Run Code Online (Sandbox Code Playgroud)

我知道它正在运行,除了成功创建所有VE文件之外,我已经在echo "please get here"语句中包含了一些函数定义,它们都受到了影响.

所以呢?

python bash virtualenvwrapper

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

php(和python)的哈希函数与我的系统不同是有原因的吗?

可能重复:
为什么Python创建的MD5哈希值与在外壳中使用echo和md5sum创建的哈希值不同?

我只是看到了,却不明白。我不了解php的内部知识吗?还是我正在假设...某事?那不成立吗?

$ sha512sum <(echo 'hello')
e7c22b994c59d9cf2b48e549b1e24666636045930d3da7c1acb299d1c3b7f931f94aae41edda2c2b207a36e10f8bcb8d45223e54878f5b316e7ce3b6bc019629  /proc/self/fd/11
Run Code Online (Sandbox Code Playgroud)

并且:

$ echo 'hello' | sha512sum
e7c22b994c59d9cf2b48e549b1e24666636045930d3da7c1acb299d1c3b7f931f94aae41edda2c2b207a36e10f8bcb8d45223e54878f5b316e7ce3b6bc019629  -
Run Code Online (Sandbox Code Playgroud)

但是之后:

php -a
Interactive shell
php > echo hash('sha512', 'hello');
9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043

? cat hashtest.php 
<?php
echo hash('sha512', 'hello');
?>
? php hashtest.php 
9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?我在Linux x86_64上,我的系统文本编码为utf-8,并且这些都是ascii范围字符。我不知道我在忽略什么。

有趣的是,对于“有趣”的某些价值,Python同意PHP:

>>> hashlib.sha512(b'hello').hexdigest()
'9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043'
Run Code Online (Sandbox Code Playgroud)

老实说,尽管我谦虚地开了门,但我仍认为这是某种巨大且未知的PHP错误。但我想不是。

php python linux hash

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

为什么PHP preg_*函数需要regexp分隔符?

这让我烦恼:

为什么preg_match('/pattern/', $haystack)而不是preg_match('pattern', $haystack)?我所看到的一切只是说明它们是必要的,并且提到你可以使用备用分隔符.

但是,它是一个在字符串之外定义自己的接口的函数.它有一个flags参数.添加字符串内的语法似乎反复无常.

它是继承自pcre的东西吗?作者对于解决这些问题并不感兴趣?PHP的又一个不正确的事实?还是有理由吗?

php regex

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

"from-import"执行整个模块吗?

好的,所以我知道它from-import与"完全"相同import,除了它显然不是因为命名空间的填充方式不同.

我的问题主要是因为我有一个utils模块,它有一个或两个函数,我的应用程序中的每个其他模块使用,我正在努力合并标准库logging模块,据我所知,我需要做的像这样的排序:

import logging
logging.basicConfig(filename="/var/log")  # I want file logging

baselogger = logging.getLogger("mine")
#do some customizations to baselogger
Run Code Online (Sandbox Code Playgroud)

然后在不同的模块中使用它我会再次导入日志记录:

import logging
logger = logging.getlogger("mine")

# log stuff
Run Code Online (Sandbox Code Playgroud)

但我想知道的是,如果我做了一个from utils import awesome_func遗嘱我的记录器肯定会被设置,记录模块是否会按照我想要的方式设置?

这也适用于其他通用设置.

python import logging

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

PHP使用__get来调用方法?

我有一些PHP cruft我想委托方法.一个穷人的混合物.

基本上我想要以下内容:

<?php

class Apprentice
{
    public function magic() {
        echo 'Abracadabra!';
    }
}

class Sourcerer // I work magic with the source
{
    private $apprentice;

    public function __construct(){
        $this->apprentice = new Apprentice();
    }

    public function __get($key) {
        if (method_exists($this->apprentice, $key)) {
            return $this->apprentice->{$key};
        }
        throw Exception("no magic left");
    }
}

$source = new Sourcerer();
$source->magic();
?>
Run Code Online (Sandbox Code Playgroud)

不扔一个Fatal error: Call to undefined method Sourcerer::magic() in .../test__get.php.

php class delegation

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