2015-12-09 3 views
0

В настоящее время я пытаюсь понять, как OOP применяется к PHP, и у меня возникают проблемы с вызовом моего класса, когда я попадаю в наследство.OOP PHP требует классов, extends

Я использую следующий PHP код:

require_once("init.php"); 

$table = new Table(); 
$table->draw(); 

$customer1 = new Customer(); 

Поскольку класс таблицы это обычный класс (не наследуется) он будет загружен правильно.

init.php имеет следующий PHP код:

function __autoload($class_name) { 
require_once('classes/'.$class_name . '.class.php'); 
} 

Поскольку класс Клиент inhereting класс пользователя, код для класса Customer внутри класса User, однако функция __autoload пытается вызовите client.class.php сейчас.

Мой класс Customer будет выглядеть примерно так:

class User 
{ 
    private $_username; 

    public function __construct($name) 
    { 
     $this->_username = $name; 
    } 

    public function getUsername() 
    { 
     return $this->_username; 
    } 
} 

class Customer extends User 
{ 
    public function __construct() 
    { 
     //some code here 
    } 
} 

Cany кто-нибудь объяснить мне, пожалуйста, как я должен вызвать унаследованный класс с PHP?

+3

'Поскольку класс Customer inhereting класс User, код для класса Customer находится внутри класса User', не имеет никакого смысла ... что такое определение вашего класса клиентов? –

+0

'__autoload()' будет запускаться для любых/всех классов, с которыми сталкивается PHP, которых он не видел нигде, даже если это унаследованный класс. – Ian

+0

Унаследованный класс - это класс, как любой другой. Нет смысла использовать его. Что на самом деле происходит здесь неправильно? – David

ответ

2

У вас должен быть только один класс для каждого файла. Ваш автозагрузку будет обрабатывать все для вас до тех пор, как каждый класс в отдельный файл, названный так же, как ...

Поместите весь код класса Customer внутри Customer.class.php

2

Каждый класс должен быть написан в собственном файле, именно из-за этой автозагрузки. Нет причин, по которым class Customer должен быть в том же файле, что и class User, просто поместите его в свой собственный файл, и ваш автозагрузчик обработает его правильно.

В противном случае вам придется принять еще одну схему именования и написать более интеллектуальный автозагрузчик, который может находить классы в файлах с разными именами. (Не делайте этого, на самом деле.)

+0

Да, это было то, что я думал делать, но продолжает ли здесь работать? – Barrosy

+0

@Barrosy Да наследование все равно будет работать. – Daan

+1

@Barrosy Да, абсолютно. Единственное требование заключается в том, что класс 'User' загружается/может быть автоматически загружен, когда PHP попадает в оператор' extends User'; ничто не диктует, что класс должен находиться в одном файле. На самом деле, типично, что вы наследуете классы сторонних библиотек, файлы которых вы, конечно, не собираетесь редактировать. – deceze

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