2012-05-15 1 views
1

Я занимаюсь разработкой PHP в оснастке CodeIgniter. Я создал свой собственный класс Model, который расширяет и отменяет стандартную кодировку. Который находится чуть ниже:PHP Наследование объектов и переопределение метода

<?php 
class MY_Model extends CI_Model 
{ 
    public $table; 
    public function __construct() 
    { 
     parent::__construct(); 
     $this->table = get_class($this); 
     $this->fields = $this->db->field_data($this->table); 
    } 
} 

Я тогда сделал модель для управления языками в базе данных, код ниже. Изнутри Language_model, если я эхо $this->table, я получаю «Language_model», который я хочу. Но ошибки кода в родительском запуске «$this->db->field_data($this->table)» в качестве имени таблицы недопустимы («MY_Model» недействителен). Код никогда не доходит до выполнения var_dump в дочернем элементе из-за ошибки. Почему не "$this->db->field_data($this->table)" также с помощью "Language_model" в качестве значения для $this->table? Запуск PHP 5.3.9

class Language_model extends MY_Model { 
    function __construct() 
    { 
     parent::__construct(); 
     var_dump($this->fields); 
    } 
} 

ответ

0

get_class имеет особое behavoir:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 


class TestBase extends CI_Controller{ 
    public function nameWthis(){ 
     return get_class($this); 
    } 
    public function nameWOthis(){ 
     return get_class(); 
    } 
} 



class Test extends TestBase{ 
    public function index() 
    { 
     echo $this->nameWthis(); 
     echo '<br/>'; 
     echo $this->nameWOthis(); 
    } 
} 

выход будет

Test 
TestBase 

с использованием get_class() без параметров делает статическое разрешение, это может быть вашей проблемой. get_class ($ this) должен работать так, как вы пробовали, возвращая текущее имя класса, динамически.

Добавить код, чтобы проверить, что существует 'Language_model'. И будьте осторожны, возможно, это имя чувствительно к регистру и может привести к сбою.

Было бы лучше иметь код ошибки. Проверьте свои журналы. Поместите var_dump (таблицу) непосредственно перед $ this-> fields = ...

 Смежные вопросы

  • Нет связанных вопросов^_^