kyo*_*kyo 6 php laravel laravel-5
在我的控制器中,我创建了一个函数 getFactorial
public static function getFactorial($num)
{
$fact = 1;
for($i = 1; $i <= $num ;$i++)
$fact = $fact * $i;
return $fact;
}
Run Code Online (Sandbox Code Playgroud)
然后,我就这样使用它
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!');
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我不断收到此错误
Call to undefined function App\Http\Controllers\getFactorial()
有人可以教我如何解决这个错误吗?
非常感谢提前.
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!');
}
}
Run Code Online (Sandbox Code Playgroud)
假设你在static getFactorial里面定义了一个函数CodeController
那么这就是你需要调用静态函数的方式,因为类中存在静态属性和方法,而不是使用类创建的对象.
CodeController::getFactorial($index);
Run Code Online (Sandbox Code Playgroud)
---------------- 更新 ----------------
为了最好的练习,我认为您可以将这种功能放在一个单独的文件中,这样您就可以更轻松地进行维护.
要做到这一点
在app目录中创建一个文件夹并将其命名为lib(您可以输入您喜欢的名称).
此文件夹需要可自动加载要做到这一点添加app/lib到composer.json下面.并运行该composer dumpautoload命令.
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
............
"app/lib"
]
},
Run Code Online (Sandbox Code Playgroud)
然后里面的文件lib将自动加载.
然后在里面创建一个文件lib,我给它命名helperFunctions.php
在里面定义函数.
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;
}
}
Run Code Online (Sandbox Code Playgroud)
并在应用程序中的任何位置调用它
$fatorial_value = getFactorial(225);
Run Code Online (Sandbox Code Playgroud)
小智 7
如果它们在同一个控制器类中,它将是:
foreach ( $characters as $character) {
$num += $this->getFactorial($index) * $index;
$index ++;
}
Run Code Online (Sandbox Code Playgroud)
否则,您需要创建该类的新实例,并调用该方法,即:
$controller = new MyController();
foreach ( $characters as $character) {
$num += $controller->getFactorial($index) * $index;
$index ++;
}
Run Code Online (Sandbox Code Playgroud)