Fenix

Конструкция типа $db->query($s)->fetchAll();

Recommended Posts

В ООП стал часто встречать конструкцию типо $db->query($s)->fetchAll(); или $this->load->model('blog');

Выглядит это очень красиво и удобочитаемо. И мне стало интересно как такое сделать. Кто нибудь знает тут как такое делается.

Share this post


Link to post
Share on other sites

а что тут не понятного , или вам скобки надо раставит для понимания очерёдности дейсвий?

Share this post


Link to post
Share on other sites
а что тут не понятного , или вам скобки надо раставит для понимания очерёдности дейсвий?

да

Share this post


Link to post
Share on other sites

методы возвращают идентификатор на себя.

class user{

private $password = '';
public $username = '';

function __construct( $username, $password )
{
$this->username = $username;
$this->password = $password;
}

function edit_username( $new_name = '' )
{
$this->username = $new_name;

return $this;
}

function display_username()
{
print $this->username;
}

}

$idx = new user('fenix', 'test');
print $idx->edit_username('fenix_2')->display_username();

Конечно пример не супер, но можешь всегда открыть сорцы моей системы и глянуть такие методы как:

$cmsp->addDatabase( $type_sql, $params = array(), $p_connect = false );

Этот метод вернет идентификатор нужного класса/базы.

$dbh = $cmsp->addDatabase( $type_sql, $params = array(), $p_connect = false )->connect();
print $dbh->version;

Share this post


Link to post
Share on other sites

Функция возвращает ссылку на свой же класс. Или указатель, я слабо понимаю терминологию, но более-менее понимаю суть ;)

Share this post


Link to post
Share on other sites
Я правильно поимаю, что вот это:

$this->load->model('blog');

то же самое, что и это:

$this->load;
$this->model('blog');

Думаю неправильно. В моем понимание model - это подфункция, потому что есть другие подобные выражения.

$this->load->model('blog')

$this->load->helper('form')

$this->load->library('benchmark')

Edited by Fenix

Share this post


Link to post
Share on other sites

С $this->load->model('blog') все просто

$this - это указатель на текущий класс, в методе которого можно увидеть такой код.

У этого класса есть переменная load, к которой можно обратиться как $this->load. Эта переменная является объектом какого-либо класса (напирмер Vasya). У этого класса есть метод model.

Получается, что $this->load->model('blog') вызов метода model класса Vasya, объект которого находится в переменной load текущего класса.

Вам стоит ознакомиться с объектно-ориентированной парадигмой, тогда все станет на свои места.

Share this post


Link to post
Share on other sites

Мда... Все очень запутано... Можешь поподробнее объяснить про переменную, которая является объектом какого-либо класса.

Share this post


Link to post
Share on other sites

Ща я попробую:

class SomeClass {
$somevar = new SomeOtherClass();

public function someMethod() {
$someData = 'some data';
return $someData;
}
}

class SomeOtherClass {
public function someOtherMethod() {
$someData = 'some data';
return $someData;
}
}

$obj = new SomeClass();
$SomeClass->somevar->someOtherMethod();

Вроде так если я правильно понял.

Share this post


Link to post
Share on other sites

А... Я кажется понял...

$this->load->model('blog')

$this->load - это переменая load этого класса которая содержит имя класса где есть функция model.

Например:

Если $this->load = "loading" то выполняется loading->model('blog'), так?

Edited by Fenix

Share this post


Link to post
Share on other sites

Ну походу она содержит не имя класса, а экземпляр класса, т.е. сам объект.

Только я не понимаю почему не записать так:

class SomeClass extends SomeOtherClass {
public function someMethod() {
$someData = 'some data';
return $someData;
}
}

class SomeOtherClass {
public function someOtherMethod() {
$someData = 'some data';
return $someData;
}
}

$obj = new SomeClass();
$SomeClass->someOtherMethod();

??? Знатоки, объясните я вообще прав или нет в своих рассуждениях? И почему нельзя сделать через extends?

Share this post


Link to post
Share on other sites
Ну походу она содержит не имя класса, а экземпляр класса, т.е. сам объект.

Только я не понимаю почему не записать так:

class SomeClass extends SomeOtherClass {
public function someMethod() {
$someData = 'some data';
return $someData;
}
}

class SomeOtherClass {
public function someOtherMethod() {
$someData = 'some data';
return $someData;
}
}

$obj = new SomeClass();
$SomeClass->someOtherMethod();

??? Знатоки, объясните я вообще прав или нет в своих рассуждениях? И почему нельзя сделать через extends?

Незнаю... Я сделал такие выводы посмотрев на этот код:

$page_controler = new $controller();
$page_controler -> $action();

Share this post


Link to post
Share on other sites

class SomeClass {
$somevar = new SomeOtherClass();

Это что? ;)

@fenix, контроллер пишется с двумя ll, controller — регулятор, управляющее устройство

Share this post


Link to post
Share on other sites
И почему нельзя сделать через extends?

Потому что содержать объект, который имеет определенное сосотояние и наследовать функциональность класса разные вещи и применяется в разных случаях.

Советую по этому поводу почитать вот эту книгу http://www.ozon.ru/context/detail/id/3905587/

Share this post


Link to post
Share on other sites
@fenix, контроллер пишется с двумя ll, controller — регулятор, управляющее устройство

знаю

Час пришел со школы и решил почитать "умную" книжку. Случайно открываю главу про юнит-тесты и вижу код:

class ValidatorTest extends PHPUnit_Framework_TestCase{
//...
public function testValidate_FalsePass(){
$store = $this -> getMock("UserStore");
$this -> validator = new Validator($store);
$this -> validator -> validateUser("bob@example.com", "wrong");
}
//...
}

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Member Statistics

    46,451
    Total Members
    3,128
    Most Online
    rhouland
    Newest Member
    rhouland
    Joined
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Спрашивают сейчас

  • Пишут сейчас

    • Вернулся в свою созданную тему через 4,5 года. )) После создания темы около года верстал заказы на фрилансе. От обычной верстки до полноценных LP и небольших сайтов. Даже один раз из своей верстки шаблон Wordpress сделал.   Потом заинтересовался другими нишами и верстку забросил. Арбитражил, занимался СЕО, даже трейдил криптовалютой больше года. Но опять потянуло в вебразработку. Пытаюсь снова все вспомнить. Мешает только основная работа - мало времени остается на своё хобби.  В общем, кому сроки не жмут и кто не боится доверится джуниору, милости просим. Сверстаю, подправлю, помогу. В свободное от работы время. Бескорыстно. Просто хочется снова покодить и не просто так, а чтобы с пользой.  Почта : zdl79@mail.ru Skype : forest19791 Телеграмм : https://t.me/forestino
    • Могу попробовать. Опыт верстки 1 год. Но в связи с основной работой, не связанной с IT, мало на это времени. zdl79@mail.ru
    • Здравствуйте, кажется я делаю что-то не так, но вот что именно никак не пойму.
      Проблема в следующем: подключаю карусель и блок становится неактивен, хотя вроде бы все должно работать как нужно.
      Пробовал подключать карусель и через cdn и через скачанный архив - результат один и тот же.
      Открывал через google, firefox и opera-у - все так же никакого сдвига.
      Подключал по инструкции на официальном сайте.
      Пробовал использовать SlickSlider, но результат тот же.
  • Popular Contributors