我会使用谷歌,但我要出去,希望你们可以帮我解决问题,或者告诉我在回来的时候我做错了什么。
我将我工厂的一个实例传递给我的控制器并基于我想要使用工厂开始的另一个控制器实例,这个控制器与我得到的这一个相关
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 24 bytes) in C:\xampp\htdocs\includes\object_factory_inc.php on line 19
我在这里是工厂和控制器,我试图从
调用它工厂
/* The purpose of this class is to create the instance of a class when needed and how needed.
For example we could have created the controller object inline but in recognition
of the polymorphic behavior of controllers we have the decided to create it in our object-
factory class(this class) which serves to hide the logic of creating the correct instance of
a specified controller.
For example the 'build_index_controller' function uses the second parameter
of the parameters passed to it to decide on the instance of the index to call
*/
class object_factory_inc
{
public function build_controller($controller_name,array $controller_params)
{
$indexed_controller_params=array_values($controller_params);
$controller_name=strtolower($controller_name);
if(!isset($indexed_controller_params[0]))
{
$controller_name=$controller_name."_controller";
return new $controller_name($this,$controller_params);
}
else
{
$controller_build_function="build_".$controller_name."_controller";
method_exists($this,$controller_build_function)?$this->$controller_build_function($controller_name,$controller_params,$indexed_controller_params):$this->controller_doesn't_exist($controller_build_function);
}
}
private function build_index_controller($controller_name,array $controller_params,array $indexed_controller_params)
{
strtolower($indexed_controller_params[0]);
switch ($indexed_controller_params[0])
{
case "s":
$controller_name=$controller_name."_search_controller";
return new $controller_name($this,$controller_params);
break;
case "admin":
$controller_name=$controller_name."_admin_controller";
return new $controller_name($this,$controller_params);
break;
case "loggedin":
$controller_name=$controller_name."_loggedin_controller";
return new $controller_name($this,$controller_params);
break;
default://if it doesn't exist just run default controller behaviour consider running 404
$controller_name=$controller_name."_controller";
return $controller_name($this,$controller_params);
}
}
private function controller_doesnt_exist($controller_name)
{
echo "404 error ".$controller_name." doesn't exist on this server";
}
}
控制器我正试图从以下位置运行它:
class index_controller
{
protected $parameters=array();
protected $default_operation='view';
protected $object_factory;
public function __construct(object_factory_inc $factory,array $parameters )
{
$this->object_factory=$factory;
$this->parameters=$parameters;
$this->varify_controller();
//print_r($parameters);
//var_dump($factory);
//require_once "views/index_view.php";
}
private function varify_controller()
{
if(true)//if logged in session is set;
{
$indexd_parameteres=array_values($this->parameters);
$indexd_parameteres[0]='loggedin';
$this->object_factory->build_controller("index",$this->parameters);
}
}
}
the normal way the controllers are usually called are from the index here it is
require_once 'includes/config.php';
$route=isset($_GET['action'])?new router_controller($_GET['action']):new router_controller($_GET['action']="/index");
$route->parse_route();
$object_factory=new object_factory_inc;
$controller=$object_factory->build_controller($route->get_controller(),$route->get_request_data());
抱歉我想给你提供所有你需要的所有内容,如果我做了一些完全错误的事情,那么请告诉我谷歌至少给我一些谷歌。
答案 0 :(得分:1)
此行正在重新创建IndexController
时间。
$this->object_factory->build_controller("index",$this->parameters);
当您通过对象工厂(上面一行)创建index_controller
时,新Index_Controller
会调用varify_controller
,因为这是在__construct()
内定义的(自动执行)首次实例化Index_Controller
时。
varify_controller()
包含对build_controller("index",$this->parameters);
的另一个调用,因此我们回到开头,无休止地创建新的索引控制器,直到超出内存限制。
通过使用构造对象的构造函数,将来可以避免这些问题。这应该只包括执行准备使用对象所需的任务,即设置对象属性或解析对象参数。
答案 1 :(得分:0)
通过添加页面顶部的行来增加内存
ini_set('memory_limit', '512M');