Dans mon contrôleur, je crée une fonction getFactorial
public static function getFactorial($num)
{
$fact = 1;
for($i = 1; $i <= $num ;$i++)
$fact = $fact * $i;
return $fact;
}
Ensuite, je l'utilise comme ça
public function codingPuzzleProcess()
{
$Word = strtoupper(Input::get('Word'));
$length = strlen($Word);
$max_value = ($length * 26);
$characters = str_split($Word);
$num = 1 ;
$index = 1;
sort($characters);
foreach ( $characters as $character) {
$num += getFactorial($index) * $index;
$index ++;
}
return Redirect::to('/coding-puzzle')
->with('Word', $Word )
->with('num', $num )
->with('success','Submit successfully!');
}
Pour une raison quelconque, je continue à recevoir cette erreur
Call to undefined function App\Http\Controllers\getFactorial()
Quelqu'un peut-il m'apprendre comment corriger cette erreur?
Très apprécié à l'avance.
CodeController.php
<?php
namespace App\Http\Controllers;
use View, Input, Redirect;
class CodeController extends Controller {
public function codingPuzzle()
{
return View::make('codes.puzzle');
}
public static function getFactorial($num)
{
$fact = 1;
for($i = 1; $i <= $num ;$i++)
$fact = $fact * $i;
return $fact;
}
public function codingPuzzleProcess()
{
$Word = strtoupper(Input::get('Word'));
$length = strlen($Word);
$max_value = ($length * 26);
$characters = str_split($Word);
$num = 1 ;
$index = 1;
sort($characters);
foreach ( $characters as $character) {
$num += getFactorial($index) * $index;
$index ++;
}
return Redirect::to('/coding-puzzle')
->with('Word', $Word )
->with('num', $num )
->with('success','Submit successfully!');
}
}
disons que vous définissez le static getFactorial
fonction dans un CodeController
alors c'est la façon dont vous devez appeler une fonction statique, car les propriétés et méthodes statiques existent dans la classe, pas dans les objets créés à l'aide de la classe.
CodeController::getFactorial($index);
---------------- MISE À JOUR ----------------
Pour une meilleure pratique, je pense que vous pouvez mettre ce genre de fonctions dans un fichier séparé afin que vous puissiez gérer plus facilement.
pour faire ça
créez un dossier dans le répertoire app
et nommez-le lib
(vous pouvez mettre un nom que vous aimez).
ce dossier doit être chargé automatiquement pour cela ajouter app/lib
à composer.json
comme ci-dessous. et exécutez le composer dumpautoload
commande.
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
............
"app/lib"
]
},
les fichiers à l'intérieur de lib
seront automatiquement chargés.
puis créez un fichier dans lib
, je le nomme helperFunctions.php
à l'intérieur qui définissent la fonction.
if ( ! function_exists('getFactorial'))
{
/**
* return the factorial of a number
*
* @param $number
* @return string
*/
function getFactorial($date)
{
$fact = 1;
for($i = 1; $i <= $num ;$i++)
$fact = $fact * $i;
return $fact;
}
}
et appelez-le n'importe où dans l'application
$fatorial_value = getFactorial(225);
S'ils sont dans la même classe de contrôleur, ce serait:
foreach ( $characters as $character) {
$num += $this->getFactorial($index) * $index;
$index ++;
}
Sinon, vous devez créer une nouvelle instance de la classe et appeler la méthode, c'est-à-dire:
$controller = new MyController();
foreach ( $characters as $character) {
$num += $controller->getFactorial($index) * $index;
$index ++;
}