web-dev-qa-db-fra.com

Appel à la fonction non définie App \ Http \ Controllers \ [nom de la fonction]

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!');

    }


}
6
kyo

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);
7
K.Toress

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 ++;
}
7
Arkitecht