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;
但是当它碰到书包时,它会吐出一个空数组。这里的解决方案和最佳做法是什么?为了允许类方法访问和修改单个静态数组变量。
答案 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>
),而是可以在不破坏引用的情况下进行传递。