我对Codeigniter 2.1.2有问题,并且持续数小时尝试解决它: -/ 我知道有很多关于此问题的线程,但是我找不到解决方案的解决方案. 我想在构造函数中加载一种方法以检查用户是否已登录,因此我尝试了以下方法: class my_class extends CI_Controller { public function __construct(); parent::__construct(); $this->check(); //doesn't work, endless redirection loop } " check()"是: public function check() { if (! $this->session->userdata('logged_in')) { redirect('/login'); // tried with & without '/' } } 方法" log
以下是关于 constructor 的编程技术问答
可能问了很多次,但我头脑头很难. 我有以下课程来管理mysql db. class blog { function show ($mysqli) { // Code working on $mysqli here } } 由于我将在此类内部的许多函数中使用$ mysqli,所以我读到我可以创建构造函数以将$ mysqli变量传递到类中,并在每个函数的内部使用它,以便我可以做类似的事情: $blog = new blog($mysqli); $blog -> show(); 这是可能的吗? 解决方案 这被称为依赖项注入. 只需在类中使用字段$mysqli并在构造函数中初始化它,然后通过$this->mysqli: 使用它. class blog { private $mysqli; function __construct(mysqli $mysqli) { $this
我正在编写此简单的代码,不知道构造函数的问题是什么: class Animal { public $_type; public $_breed; public function __construct ($t, $b) { echo "i have initialized
"; $this ->_type = $t; $this ->_breed = $b; echo "type is " .$_type. "
"; echo "breed is " .$_breed. "
"; } public function __destruct () { echo "i am dying"; } } $dog = new Animal("Dog", "Pug"); 解决方案 尝试此(注意回声线): c
是否必须从子类构造函数中的构造函数调用父构建器? 解释考虑以下示例: class Parent{ function __construct(){ //something is done here. } } class Child extends Parent{ function __construct(){ parent::__construct(); //do something here. } } 这样做是很正常的.但是请考虑类Child的以下构造函数: function __construct(){ //Do something here parent::__construct(); } 上述代码正确吗?在您打电话给父母的构造函数之前,我们可以做点什么吗?另外,如果我们不将父母的构造函数称为孩子的构造函数,那么它是合法的吗? class Chil
我在__construct()中定义了一个新变量,我想在此class的另一个function中使用它. 但是我的变量在另一个功能中为空! 这是我的代码: class testObject{ function __construct() { global $c; $data = array("name"=>$c['name'], "family"=>$c['family']); } function showInfo() { global $data; print_r($data); } } 解决方案 声明变量$data作为构造函数内部的全局: function __construct() { global $c; global $data;
我有一类类似的形式: class A{ public function __constructor(classB b , classC c){ // } public function getSum(var1, var2){ return var1+var2; } } 我的测试用例类是这样的: use A; class ATest extends PHPUnit_Framework_TestCase{ public function testGetSum{ $a = new A(); $this->assertEquals(3, $a->getSum(1,2)); } } 但是,当我运行phpunit时,它会引发一些错误,例如: Missing argument 1 for \..\::__construct(), calle
我已经在Stackoverflow上搜索了许多Google结果页面,但找不到似乎适合我情况的解决方案.我似乎只有最后一个障碍在我要构建的函数中,它使用call_user_func_array动态创建对象. 我遇到的可收集致命错误是Object of class Product could not be converted to string.当错误发生时,在日志中,我会得到其中的五个(每个参数):PHP Warning: Missing argument 1 for Product::__construct(),在可捕获的致命错误之前. 这是函数的代码: public static function SelectAll($class, $table, $sort_field, $sort_order = "ASC") { /* First, the function performs a MySQL query using the provided argument
我的函数获取variadic参数,我从func_get_args() 获得 此函数需要用这些参数调用构造函数.但是,我不知道该怎么做. 使用call_user_func,您可以用一系列参数调用函数,但是如何从中调用构造函数?我不能只是将一系列论点传递给它;它必须相信我称之为"正常". 谢谢! 解决方案 对于PHP call_user_func_array创建类实例,则不容易可用.但是,使用 Reflection 这很琐碎: $reflection = new ReflectionClass( 'yourClassName' ); $instance = $reflection->newInstanceArgs( $yourArrayOfConstructorArguments ); 其他解决方案 如果由于某种原因无法使用ReflectionClass::newInstanceArgs这是使用eval()的另一个解决方案: function mak
我对构造函数的工作方式有些困惑. 我有一个带有构造函数的课程,当我实例化新对象时,它会被调用. $foo = new Foo($args); __construct($params)在类Foo中调用,并执行适当的初始化代码. 但是,当我使用类调用静态函数时,构造函数再次调用. $bar = Foo::some_function(); //runs the constructor from Foo 这会导致构造函数执行,运行我仅在创建新的Foo对象时才打算使用的对象初始化代码. 我是否错过了构造函数的工作方式?还是有一种方法可以防止__construct()在我使用类静态函数调用时执行? 我应该使用"工厂"功能来进行对象初始化?如果是这样,构造函数的意义是什么? :: edit :: 我有一个表格,用户可以将照片上传到专辑(create_photo.php)和一个可以查看相册的区域(view_photos.php).表格提交: $ph
在将数组声明为类成员时,应该完成哪种方法? class Test1 { private $paths = array(); public function __construct() { // some code here } } 或 class Test2 { private $paths; public function __construct() { $this->paths = array(); // some code here } } 在良好实践和表现方面,哪一个更好?您会推荐什么? 解决方案 在声明类变量时,我建议这样做.构造函数可以在扩展类中覆盖,如果您的任何功能取决于此变量是数组(甚至是空的),则可能导致E_Notices甚至E_WARNINGS 其他解决方案 如果您要在初始化过程中动态填充数组,请在构造函数中进行.如果包含固定值,请在
我正在设计一个类,该类定义一个高度复杂的对象,其中大多数可选参数(50+),其中许多将具有默认值(例如:$type = 'foo'; $width = '300'; $interactive = false;).我正在尝试确定设置构造函数和实例/类变量的最佳方法,以便能够: 使使用类易于使用 使自动介绍类(即:使用phpdocumentor) 编码这个优雅 根据上述内容,我不想传递构造函数大量的论点.我将传递一个单个哈希,其中包含初始化值,例如:$foo = new Foo(array('type'=>'bar', 'width'=>300, 'interactive'=>false)); 在编码课程方面,我仍然觉得我宁愿拥有... class Foo { private $_type = 'default_type'; private $_width = 100; private $_interactive = true;
我正在使用Laravel 4构建CMS,并且我有一个看起来像这样的管理页面的基本管理器控制器: class AdminController extends BaseController { public function __construct(UserAuthInterface $auth, MessagesInterface $message, ModuleManagerInterface $module) { $this->auth = $auth; $this->user = $this->auth->adminLoggedIn(); $this->message = $message; $this->module = $module; } } IM使用Laravel的IOC容器将类依赖项注入构造函数.然后,我拥有各种控制器类,可以控制组成CM的不同模块,每个类都扩展了管理类.例如
我正在扩展一个SPL(标准PHP库)类之一,我无法称呼父母的构造函数.这是我遇到的错误: 致命错误:无法调用构造函数 这是SplQueue的文档的链接: http:///www.php.net/manual/en/class.splqueue.php 这是我的代码: $queue = new Queue(); class Queue extends SplQueue { public function __construct() { echo 'before'; parent::__construct(); echo 'I have made it after the parent constructor call'; } } exit; 是什么可以阻止我调用父母的构造函数? 解决方案 SplQueue从SplDoublyLinkedList继承.这些类都没有定义其自己的构造函数.
我想知道您是否可以帮助我. 我有两个类,一个扩展了另一个.B类将通过各种不同的对象扩展并用于通用数据库交互..现在我希望B类处理其连接和断开连接而无需从A或任何类方向的方向外部输入.. 我了解的问题是,扩展类不会自动运行其__ -construct函数..是否有办法解决此问题? 预先感谢.. class a extends b { public function __construct() { } public function validateStuff() { $this->insert_record(); } } class b { public function __construct() { $this->connect(); } protected function connect() { return true; } pub
所以这是我一直在掌握的事情.将一些小(单文件)应用程序转换为PDO.我可以使用PDO,连接到数据库并运行查询,所有工作都可以. 但是,每次我初始化一个新的PDO时,我也必须运行 setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 是的,这只是一行,但是有一天我可能需要在其中添加更多东西.对我来说,以某种方式扩展了PDO类似乎更好的是,我可以用一条线开始我的DB连接.即使在此阶段仅添加一行代码,也可以创建自己的班级,如果我决定将来添加其他任何内容,也可以使我保持不久. 我找到了这样的东西... class myPDO extends PDO { public function __construct($dsn, $user=null, $pass=null, $options=null) { parent::__construct($dsn, $user, $pass, $optio
我正在研究一个个人HMVC项目: 没有服务定位器,没有全球状态(例如static或global),没有单人. 模型处理被封装在服务(服务=域对象 +存储库 +数据映射器)中. 所有控制器都扩展了一个抽象控制器. 所有项目依赖性均通过 auryn 依赖性注入容器. 所有需要的依赖项都注入了抽象控制器的构造函数中.如果我想覆盖该构造函数,那么我也必须在子控制器的构造函数中传递所有这些依赖项. class UsersController extends AbstractController { private $authentication; public function __construct( Config $config , Request $request , Session $session , View $view , Response $response