Это означает, что вы пытаетесь манипулировать тем, что имеет ссылку, но еще не инициализировано. Первое, что нужно сделать, это проверить каждый созданный экземпляр. Используйте контрольные точки, часы, проверяйте свои значения varibale. Следить за трассировкой стека и искать точные строки и столбцы, которые создают проблему
Я обычно делаю это:
1.- создайте классы сущности в / system / application / classes
class MyEntity {
}
2. определите константу, указывающую на эту папку on /system/application/config/constants.php
define('CLASSES_DIR', APPPATH . "classes/");
3.- включить классы объектов из моделей:
require_once(CLASSES_DIR . "MyEntity.php");
class MyModel extends Model {
function test() {
$entity = new MyEntity();
$entity->doSomeStuff();
}
}
Это не нарушит вашу структуру mvc , и сохраняет для классов объектов раздельно. Надеюсь, что это поможет!
Модели CodeIgniter используют одноэлементный шаблон. Вы можете создавать библиотеки или использовать $ foo = new Some_Model, если хотите, помните, что все это просто PHP:)
Мне понравилось решение @ ilbesculpi, но я немного настроил его, используя пространство имен, вместо использования константы и require_once
. Вот моя версия:
1) Создайте классы объектов в /system/application/entities.
namespace MyApplication\Entities;
class ArticlesEntity
{
function doSomeStuff()
{
// Your code here...
}
}
2) Включите мой класс сущности в мою модель с помощью using
утверждение.
use MyApplication\Entities\ArticlesEntity;
class ArticlesModel extends CI_Model
{
function test()
{
$entity = new ArticlesEntity();
$ArticlesEntity->doSomeStuff();
}
}