我希望能够直接调用我分配给对象属性的闭包,而无需将闭包重新分配给变量然后调用它.这可能吗?
下面的代码不起作用和原因Fatal error: Call to undefined method stdClass::callback().
$obj = new stdClass();
$obj->callback = function() {
print "HelloWorld!";
};
$obj->callback();
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个类来处理数组,但我似乎无法array_map()在其中工作.
<?php
//Create the test array
$array = array(1,2,3,4,5,6,7,8,9,10);
//create the test class
class test {
//variable to save array inside class
public $classarray;
//function to call array_map function with the given array
public function adding($data) {
$this->classarray = array_map($this->dash(), $data);
}
// dash function to add a - to both sides of the number of the input array
public function dash($item) {
$item2 = '-' . $item . '-';
return $item2;
}
}
// dumps start array …Run Code Online (Sandbox Code Playgroud) 我想在PHP中实现类似于ac#delegate方法的东西.快速解释我正在尝试做的事情:我正在尝试实现一些异步功能.基本上,一些资源密集型调用在底层系统到达时会被排队,缓存和调度.当异步调用最终收到响应时,我希望引发一个回调事件.
我遇到了一些问题,想出一种在PHP中进行回调的机制.我想出了一种现在适用的方法,但我对它不满意.基本上,它涉及传递对象的引用和方法的名称,它将作为回调(将响应作为参数),然后在需要时使用eval调用方法.由于各种原因,这是次优的,有没有人知道更好的方法呢?
是否有可能将比较运算符作为变量传递给函数?我正在寻找生产一些便利功能,例如(我知道这不起作用):
function isAnd($var, $value, $operator = '==')
{
if(isset($var) && $var $operator $value)
return true;
}
if(isAnd(1, 1, '===')) echo 'worked';
Run Code Online (Sandbox Code Playgroud)
提前致谢.
例如,我有以下代码:
function a($param)
{
function b()
{
echo $param;
}
b();
}
a("Hello World!");
Run Code Online (Sandbox Code Playgroud)
抛出E_NOTICE错误,因为$ param当然是未定义的(在b()中).
我无法将$ param传递给b(),因为b()应该是preg_replace_callback()的回调函数.所以我有想法在$ GLOBALS中保存$ param.
有没有更好的解决方案?
有没有办法让PHP等到函数返回后再继续?
这是我的代码:
<?php
set_time_limit(0);
function waitforchange($nof) {
$lfilemod=filemtime($nof);
while(filemtime($nof) == $lfilemod) {
clearstatcache();
usleep(10000);
}
}
waitforchange('./blahblah.txt')
sleep(5);
echo 'done';
?>
Run Code Online (Sandbox Code Playgroud)
它应该等到blahblah.txt更改,然后等待另外五秒,然后打印出"完成",然而,无论文件是否实际更改,它都会在五秒后打印出"完成".
一个简单的问题.
在php中是否可以内联声明回调函数?例如,
array_filter($input_array, "function($item) { $item['state'] != 0 }")
Run Code Online (Sandbox Code Playgroud) 我正在尝试在PHP中创建一个通用类,该类将提供一种调用Web服务,解析返回的XML并返回JSON对象的方法。
我在不支持CURL和/或JSON的服务器上遇到致命错误,并寻找一种方法来正常地将JSON对象中的错误返回给客户端,而不是崩溃。
经过一番搜索,我发现了一篇文章,建议我可以调用ob_start("fatal_error_handler")并提供处理程序函数:
function fatal_error_handler($buffer) {
if (ereg("(error</b>:)(.+)(<br)", $buffer, $regs) ) {
$err = preg_replace("/<.*?>/","",$regs[2]);
$buffer = json_encode(array("errorMessage" => "Fatal error occurred", "exceptionMessage" => $err));
}
return $buffer;
}
Run Code Online (Sandbox Code Playgroud)
并ob_end_flush在脚本末尾调用。
这种运作良好,但我现在想的是功能添加到我的课。我尝试并成功添加了以下构造函数和析构函数:
function __construct() {
ob_start("fatal_error_handler");
}
function __destruct() {
ob_end_flush();
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试将处理程序函数移入类时,无法将其添加到ob_start()调用中。我尝试了ob_start("$this->fatal_error_handler")和ob_start("WebService::fatal_error_handler")(WebService是我的班级名称)-无济于事。
我的问题是,如何将类函数的名称传递到ob_start构造函数中?
一个额外的问题:我是在正确地做这件事,还是有一种更好的方法来处理客户可以处理的致命错误?
随着我作为一名初级PHP开发人员继续努力提高自己,我开始尝试打破其他人的工作.我觉得这有助于我理解,并给我一些想法.
在PHP类中,我没有得到两件事,$这意味着什么,以及什么数组($ this,'some_function')意味着什么时候我会期待一个函数名称.
非常感谢