dougou5852 2015-09-30 15:37
浏览 175
已采纳

调用未定义的函数App \ Http \ Controllers \ [函数名] [重复]

This question already has an answer here:

In my controller, I create a function getFactorial

public static function getFactorial($num)
{
    $fact = 1;
    for($i = 1; $i <= $num ;$i++)
        $fact = $fact * $i;
    return $fact;
}

Then, I use it like this

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

}

For some reason, I keep getting this error

Call to undefined function App\Http\Controllers\getFactorial()

Can someone please teach me how to fix this error ?

Much appreciated in advance.


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

    }


}
</div>
  • 写回答

2条回答 默认 最新

  • doubu2730 2015-09-30 15:41
    关注

    say you define the static getFactorial function inside a CodeController

    then this is the way you need to call a static function, because static properties and methods exists with in the class, not in the objects created using the class.

    CodeController::getFactorial($index);
    

    ----------------UPDATE----------------

    To best practice I think you can put this kind of functions inside a separate file so you can maintain with more easily.

    to do that

    create a folder inside app directory and name it as lib (you can put a name you like).

    this folder to needs to be autoload to do that add app/lib to composer.json as below. and run the composer dumpautoload command.

    "autoload": {
        "classmap": [
                    "app/commands",
                    "app/controllers",
                    ............
                    "app/lib"
        ]
    },
    

    then files inside lib will autoloaded.

    then create a file inside lib, i name it helperFunctions.php

    inside that define the function.

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

    and call it anywhere within the app as

    $fatorial_value = getFactorial(225);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置