大多数PHP IDE依靠phpdoc来获取有关表达式类型的提示.然而,我经常使用这种模式,似乎没有涵盖:
class Control {
private $label = '';
/** @return ??? */
public static function Make(){ return new static(); }
/** @return ??? */
public function WithLabel($value){ $this->label = $value; return $this; }
/** @return void */
public function Render(){ /* ... */ }
}
class Textbox extends Control {
private $text = '';
/** @return ??? */
public function WithText($text){ $this->width = $text; return $this; }
}
Run Code Online (Sandbox Code Playgroud)
现在我可以使用这样的类:
Textbox::Make() // <-- late static binding, returns Textbox
->WithLabel('foo') // …
Run Code Online (Sandbox Code Playgroud) 我试图通过拖放上传大文件.我有这段Javascript代码:
xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.setRequestHeader('X-File-Name', file.name);
xhr.setRequestHeader('X-File-Size', file.size);
xhr.setRequestHeader('Content-Type', file.type);
xhr.send(file);
Run Code Online (Sandbox Code Playgroud)
where url
是一个目标url的字符串,file
是一个文件拖放后检索Blob
到的(根据http://www.w3.org/TR/XMLHttpRequest2/#the-send-method).此代码适用于Chrome 12,Safari 5和Firefox 4,并在HTTP请求正文中发送文件的原始内容.
但是,如果文件足够大,则永远不会发送请求.相反,XMLHttpRequest
对象触发和错误事件(没有任何有用的消息).在我的环境中,此限制为86Mb,但因机器而异.
Chrome的javascript控制台显示以下消息:
POST http://localhost/xfiles/xfiles.php undefined (undefined)
Run Code Online (Sandbox Code Playgroud)
这与我的代码无关(与较小的文件完美配合).
浏览器似乎在内存中并在发送之前读取整个文件.可能有一个内存不足的异常或类似的东西会停止进程.在任何情况下,都没有发送HTTP请求,因此可以肯定服务器的限制与此问题无关.
无论如何,阅读整个文件是浪费资源.
是否有任何方法以流方式逐字节发送文件,而不必先将其存储在内存中?
我使用XDebug作为PHP应用程序的分析器.我遇到了一个XDebug严重改变结果的情况,以至于它们没用.
这是一个演示问题的简化示例:
function foo(){ $x = 1; }
function bar(){ foo(); }
Run Code Online (Sandbox Code Playgroud)
测试A:
$t0 = microtime(true);
for ($i = 0; $i < 1000000; $i++) foo();
echo microtime(true) - $t0;
Run Code Online (Sandbox Code Playgroud)
测试B:
$t0 = microtime(true);
for ($i = 0; $i < 1000000; $i++) bar();
echo microtime(true) - $t0;
Run Code Online (Sandbox Code Playgroud)
所以,这些是我得到的结果(以秒为单位):
profiler | profiler > profiler
disabled | enabled > results
--------------------------------------------------------------------
output | output > total time time in foo() time in bar()
Test A 0.159 | 12.199 > 12.245 0.110 - (not …
Run Code Online (Sandbox Code Playgroud) 我有这个github存储库,它是我正在开发的一个开源项目的网页:
https://github.com/o8/o8.github.com
根据github的文档,这个存储库是特殊的,因为它每次收到推送时都会构建一个github-pages网站.该网站在http://o8.github.com下可用.这很好用:-).
但是,我的存储库包含该文件夹下的子模块/oxy
.这是/.gitmodules
使用公共url(git://github.com/linepogl/oxygen.git
)在文件中声明的.我希望这个子模块中的所有文件也都包含在github-pages网站中.这不会发生,或者至少我不知道如何使其工作.
例如,有文件/oxy/hlp/index.html
.我预计地址http://o8.github.com/oxy/hlp/index.html会指向此文件.相反,我得到404错误.
有任何想法吗?
我是 Bison 解析的新手,我无法理解它是如何工作的。我有以下语法,其中我保留了最低限度的语法来突出问题。
%left '~'
%left '+'
%token T_VARIABLE
%%
start: expr;
expr: composite_expr | variable_expr;
variable_expr: T_VARIABLE;
composite_expr:
expr '+' expr
| '~' variable_expr { do_something_1(); }
| '~' composite_expr { do_something_2(); }
;
%%
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我想'~'
根据后面的表达式类型对运算符应用不同的函数。然而,这会产生2个reduce/reduce冲突。
当然,如果我像这样重写composite_expr规则......
composite_expr:
expr '+' expr
| '~' expr { /* ??? */ }
;
Run Code Online (Sandbox Code Playgroud)
...然后就没有冲突了,但现在我不能调用 or ,do_something_1()
因为do_something_2()
我无法再判断expr
isvariable_expr
或composite_expr
。
还有其他方法可以做到这一点吗?谁能解释为什么首先要减少/减少冲突?
请记住,这是一个精简版本,实际上,规则composite_expr
很长。所以复制它是不可能的。
UserName = String(33, 0)
VB 6.0中的含义是什么,C#中的等价物是什么.
请帮助我在将VB 6.0代码转换为C#时遇到错误.
提前致谢.
php ×2
bison ×1
c# ×1
github ×1
javascript ×1
late-binding ×1
performance ×1
php-ide ×1
phpdoc ×1
profiler ×1
streaming ×1
upload ×1
vb6 ×1
xdebug ×1