Tuesday, 10 January 2017

php - Call to undefined function AppHttpControllers [ function name ]




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





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

}


}

Answer



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

No comments:

Post a Comment

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...