相关疑难解决方法(0)

直接调用分配给对象属性的闭包

我希望能够直接调用我分配给对象属性的闭包,而无需将闭包重新分配给变量然后调用它.这可能吗?

下面的代码不起作用和原因Fatal error: Call to undefined method stdClass::callback().

$obj = new stdClass();
$obj->callback = function() {
    print "HelloWorld!";
};
$obj->callback();
Run Code Online (Sandbox Code Playgroud)

php closures properties object

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

array_map不在类中工作

我正在尝试创建一个类来处理数组,但我似乎无法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 arrays class function array-map

43
推荐指数
2
解决办法
4万
查看次数

像php中的回调委托函数

我想在PHP中实现类似于ac#delegate方法的东西.快速解释我正在尝试做的事情:我正在尝试实现一些异步功能.基本上,一些资源密集型调用在底层系统到达时会被排队,缓存和调度.当异步调用最终收到响应时,我希望引发一个回调事件.

我遇到了一些问题,想出一种在PHP中进行回调的机制.我想出了一种现在适用的方法,但我对它不满意.基本上,它涉及传递对象的引用和方法的名称,它将作为回调(将响应作为参数),然后在需要时使用eval调用方法.由于各种原因,这是次优的,有没有人知道更好的方法呢?

php oop

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

PHP中的动态比较运算符

是否有可能将比较运算符作为变量传递给函数?我正在寻找生产一些便利功能,例如(我知道这不起作用):

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)

提前致谢.

php variables operators

13
推荐指数
4
解决办法
1万
查看次数

如何访问"父"函数的参数?

例如,我有以下代码:

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 functional-programming global-variables callback

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

让PHP等到函数完成?

有没有办法让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 wait thread-sleep

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

php内联回调

一个简单的问题.

在php中是否可以内联声明回调函数?例如,

array_filter($input_array, "function($item) { $item['state'] != 0 }")
Run Code Online (Sandbox Code Playgroud)

php inline callback

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

将ob_start指向类内的函数以捕获致命错误

我正在尝试在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 fatal-error

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

$这在类定义中意味着什么?

随着我作为一名初级PHP开发人员继续努力提高自己,我开始尝试打破其他人的工作.我觉得这有助于我理解,并给我一些想法.

在PHP类中,我没有得到两件事,$这意味着什么,以及什么数组($ this,'some_function')意味着什么时候我会期待一个函数名称.

非常感谢

php oop class this

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