说我有以下内容:
<?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.)
什么应该我做?
所以,我可以这样做(使用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黑客.
我正在做一个virtualenvwrapper的新安装,由于某种原因,在运行virtualenvwrapper.sh后,它的功能不可用.
$ virtualenvwrapper.sh
creating.....
$ workon
workon: command not found
Run Code Online (Sandbox Code Playgroud)
我知道它正在运行,除了成功创建所有VE文件之外,我已经在echo "please get here"语句中包含了一些函数定义,它们都受到了影响.
所以呢?
我只是看到了,却不明白。我不了解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错误。但我想不是。
这让我烦恼:
为什么preg_match('/pattern/', $haystack)而不是preg_match('pattern', $haystack)?我所看到的一切只是说明它们是必要的,并且提到你可以使用备用分隔符.
但是,它是一个在字符串之外定义自己的接口的函数.它有一个flags参数.添加字符串内的语法似乎反复无常.
它是继承自pcre的东西吗?作者对于解决这些问题并不感兴趣?PHP的又一个不正确的事实?还是有理由吗?
好的,所以我知道它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遗嘱我的记录器肯定会被设置,记录模块是否会按照我想要的方式设置?
这也适用于其他通用设置.
我有一些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.