¿Cuál es la syntax correcta para llamar a una función recursivamente en php?

Tengo una función que usa recursividad para llamarme a sí misma y necesito saber la syntax correcta para llamarme.

Nota: Estoy usando la técnica de progtwigción orientada a objetos y la función proviene de un archivo de clase.

Debajo está mi función

// Generate Unique Activation Code //********************************************************************************* public function generateUniqueActivationCode() { $mysql = new Mysql(); $string = new String(); $activation_code = $string->generateActivationCode(); // Is Activation Code Unique Check $sql = "SELECT activation_id FROM ". TABLE_ACTIVATION_CODES ." WHERE activation_code='$activation_code' LIMIT 1"; $query = $mysql->query($sql); if($mysql->rowCount($query) > 0) { // This function is calling itself recursively return generateUniqueActivationCode(); // <- Is this syntax correct in Oops } else { return $activation_code; } } 

Debería el código llamarlo recursivamente

 return generateUniqueActivationCode(); 

O

 return $this->generateUniqueActivationCode(); 

o si hay algo más aparte de estas 2 formas.

Por favor hagamelo saber.

La recursividad es la FORMA COMPLETAMENTE INCORRECTA DE RESOLVER ESTE PROBLEMA

A diferencia de la iteración, estás llenando la stack y generando nuevos objetos innecesariamente.

La forma correcta de resolver el problema es generar un valor aleatorio dentro de un scope que haga que los duplicados sean muy poco probables; sin embargo, sin algún cuantificador externo (como un nombre de usuario) para definir el scope, la iteración es el camino a seguir.

Hay otros problemas con su código: realmente debería agregar registros en el mismo lugar donde verifica los registros.

Estoy utilizando la técnica de progtwigción orientada a objetos y la función proviene de un archivo de clase

Entonces no es una función, es un método.

Y su código es susceptible a la inyección de SQL.

Una mejor solución sería:

 class xxxx { .... public function generateUniqueActivationCode($id) { if (!$this->mysql) $this->mysql = new Mysql(); if (!$this->string) $this->string = new String(); $limit=10; do { $activation_code = $string->generateActivationCode(); $ins=mysql_escape_string($activation_code); $sql="INSERT INTO ". TABLE_ACTIVATION_CODES ." (activation_id, activation_code)" . "VALUES ($id, '$ins)"; $query = $mysql->query($sql); if (stristr($query->error(), 'duplicate')) { continue; } return $query->error() ? false : $activation_code; } while (limit--); return false; } } // end class 

Debería llamarlo con la variable $ this dado que su función es parte de la instancia. Asi que:

 return $this->generateUniqueActivationCode(); 

PD: ¿Por qué no probar ambos métodos y ver si genera algún error?