Buenas a todos,
Estoy creandome una clase, donde un método público es así:
public function render ( $starting_level = 2, $ending_level = 2, $html_connector = array('<li>','</li>'), $self_item = TRUE, $name_prefix = "" )
{
$items = $this->brothers;
if($self_item)
{
$items[] = $this->selected_item;
[b]usort($items,'_menu_sort_');[/b]
}
$htmlOutput = $html_connector[0];
foreach($items as $id => $item){
$name_prefix_tokenized = $this->tokenize_string( $name_prefix , $item, $id );
$htmlOutput .=$html_connector[0]."<a href='?page_id=".$item['id']."'>". $name_prefix_tokenized . $item['name'] ."</a>".$html_connector[1];
}
print $htmlOutput;
}
Donde veis que está resaltado en negrita (entre b y /b, que la negrita no se puede mezclar con code), es para hacer uso de una función personalizada de comparación, que es la que sigue:
function _menu_sort_($a, $b)
{
return $a['id'] > $b['id'];
}
De acuerdo, todo funciona genial, siempre y cuando, la función menu_sort se defina fuera de la clase, pero me gustaría poder encapsular dicha función dentro de la clase, del rollo:
private function _menu_sort_($a, $b)
{
return $a['id'] > $b['id'];
}
public function render ( $starting_level = 2, $ending_level = 2, $html_connector = array('<li>','</li>'), $self_item = TRUE, $name_prefix = "" )
{
$items = $this->brothers;
if($self_item)
{
$items[] = $this->selected_item;
[b]usort($items,'_menu_sort_');[/b]
}
$htmlOutput = $html_connector[0];
foreach($items as $id => $item){
$name_prefix_tokenized = $this->tokenize_string( $name_prefix , $item, $id );
$htmlOutput .=$html_connector[0]."<a href='?page_id=".$item['id']."'>". $name_prefix_tokenized . $item['name'] ."</a>".$html_connector[1];
}
print $htmlOutput;
}
Pero así si que no funciona, parece que no encuentra la función menu_sort, lo cual es más bien lógico, la he definido como privada y como pública, así que eso no es. También he provado:
[b]usort($items,'$this->_menu_sort_');[/b]
[b]usort($items,$this->_menu_sort_());[/b]
[b]usort($items,$this->_menu_sort_($a, $b));[/b]
usort($items,'menu::_menu_sort_');
etc. Sé que la mayoría de cosas son ilógicas xD pero es que ésta opción:
usort($items,$this->menu_sort());
ha conseguido llamar a la función de comparación, pero me ha dado error porque no tenía los parámetros que la función pide.
Resumen: Se puede hacer lo que yo quiero? es decir, definir la función de comparación dentro de la clase, y si puede ser, como elemento privado?
Pd: el nombre de la clase es 'menu'