遍及类的可访问静态数组,尝试将其推入数组,但保持空白为空

时间:2018-07-05 14:09:32

标签: php arrays scope

class UpcomingEvents {

//Variable I'm trying to make accessible and modify throughout the class methods
private static $postObjArr = array();
private static $postIdArr = array(); 

private static $pinnedPost;  

//My attempt at a get method to solve this issue, it did not
private static function getPostObjArr() {
    $postObjArr = static::$postObjArr;
    return $postObjArr;
}

private static function sortByDateProp($a, $b) {
    $Adate = strtotime(get_field('event_date',$a->ID));
    $Bdate = strtotime(get_field('event_date',$b->ID));
    if ($Adate == $Bdate) {
        return 0;
    }
    return ($Adate < $Bdate) ? -1 : 1;
}

private static function queryDatesAndSort($args) {

    $postQuery = new WP_Query( $args );

    if( $postQuery->have_posts() ) {
        while( $postQuery->have_posts() ) {
            $postQuery->the_post();

            //Trying to push to the array, to no avail
            array_push(static::getPostObjArr(), get_post());
        }
    }

    //Trying to return the array after pushing to it, comes back empty
    return(var_dump(static::getPostObjArr()));

    //Trying to sort it
    usort(static::getPostObjArr(), array(self,'sortByDateProp'));  

    foreach (static::getPostObjArr() as $key => $value) {
        array_push(static::$postIdArr, $value->ID);
    }  

}
}

我正在尝试访问该类中的$ postObjArr,并使用queryDatesAndSort()将其推送到它;方法。我已经尝试了几件事,最近一次是对变量使用get方法。我不想让它成为全球性的,因为我听说过这是错误的做法。我也尝试通过引用I.E

&static::$postObjArr;

但是当它碰到书包时,它会吐出一个空数组。这里的解决方案和最佳做法是什么?为了允许类方法访问和修改单个静态数组变量。

1 个答案:

答案 0 :(得分:1)

static::$postObjArr[] = get_post()
     

我不认为这会有所作为,但确实有效。你能给我解释一下为什么行得通但是array.push();不是吗?

数组在PHP中总是 写时复制。如果将数组分配给另一个变量,将其传递到函数中或从函数中返回,则出于所有目的和目的,它是一个不同的新数组。修改它不会修改“原始”数组。如果要传递数组并继续修改原始数组,则必须使用按引用传递 无处不在。这意味着您必须在将&分配给其他变量的任何地方添加&,将其传递给函数或从函数返回。如果您在任何地方忘记了static::$postObjArr,则引用将被破坏。

因为使用它很烦人,所以您很少在PHP中使用引用,而是直接修改数组(stdClass),或者使用对象(class或自定义的<Orders> <NewOrders> <Order> <OrderNbr>xxxxxxx</OrderNbr> <Amount>xxx</Amount> </Order> </NewOrders> </Orders> <Orders> <NewOrders> <Order> <OrderNbr>yyyyyy</OrderNbr> <Amount>yyy</Amount> </Order> </NewOrders> </Orders> ),而是可以在不破坏引用的情况下进行传递。