我在这里遇到一个奇怪的问题:我要粘贴你的函数会导致内存泄漏,从而导致服务器崩溃。
奇怪的是,如果我将每个==
更改为===
,则不会发生此内存泄漏。
private function controllaPrerequisitiPerEliminazioneAbilita( $pgid, $id_abilita, $lista_ab, $params = array() )
{
global $PREREQUISITO_TUTTE_ABILITA;
global $PREREQUISITO_F_TERRA_T_SCELTO;
global $PREREQUISITO_5_SUPPORTO_BASE;
global $PREREQUISITO_3_CONTROLLER;
global $PREREQUISITO_4_SPORTIVO;
global $ID_ABILITA_F_TERRA;
global $ID_ABILITA_T_SCELTO;
$query_ab = "SELECT * FROM abilita WHERE id_abilita = :id";
$abilita = $this->db->doQuery( $query_ab, array( ":id" => $id_abilita ), False );
$abilita = $abilita[0];
$ab_prereq = array_filter( $lista_ab, "Utils::filtraAbilitaSenzaPrerequisito" );
$new_params = array();
if( count( $ab_prereq ) > 0 )
{
$qta_sportivo = count( array_filter( $lista_ab, "Utils::filtraAbilitaSportivo" ) );
$qta_sup_base = count( array_filter( $lista_ab, "Utils::filtraAbilitaSupportoBase" ) );
$qta_controll = count( array_filter( $lista_ab, "Utils::filtraAbilitaController" ) );
foreach( $ab_prereq as $i => $ap )
{
if (
$ap["prerequisito_abilita"] == $id_abilita
|| $ap["prerequisito_abilita"] == $PREREQUISITO_TUTTE_ABILITA && $abilita["classi_id_classe"] == $ap["classi_id_classe"]
|| (
$ap["prerequisito_abilita"] == $PREREQUISITO_F_TERRA_T_SCELTO
&& (
$id_abilita == $ID_ABILITA_F_TERRA
|| $id_abilita == $ID_ABILITA_T_SCELTO
)
)
|| $ap["prerequisito_abilita"] == $PREREQUISITO_5_SUPPORTO_BASE && $qta_sup_base < 5
|| $ap["prerequisito_abilita"] == $PREREQUISITO_4_SPORTIVO && $qta_sportivo < 4
|| $ap["prerequisito_abilita"] == $PREREQUISITO_3_CONTROLLER && $qta_controll < 3
)
{
$new_params[] = $ap["id_abilita"];
//removing this element from the array we will pass in the recursion
Utils::rimuoviElementoArrayMultidimensionale( $lista_ab, "id_abilita", $ap["id_abilita"] );
}
}
}
if( count( $new_params ) > 0 )
{
foreach( $new_params as $p )
$params = $this->controllaPrerequisitiPerEliminazioneAbilita( $pgid, $p, $lista_ab, $params );
}
return array_merge( $new_params, $params );
}
我真的不明白为什么会这样。你能帮我一把吗?
提前谢谢!