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,559
    Total Members
    3,128
    Most Online
    Stilons
    Newest Member
    Stilons
    Joined
  • Recently Browsing   0 members

    No registered users viewing this page.

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

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

    • есть внешний  блок с  фоновой  картинкой  на весь блок а внутри него  блок с контентом  2 вопроса  как переместить этот блок с контентом  так как мне нужно - почему- то все смещается вместе с фоном и еще как сделать так чтобы остальная часть листвы бамбука была видна сайт http://frontend-er.h1n.ru/asia-spa/
    • Добрый вечер! Помогите пожалуйста понять почему  при использовании сетки у меня вторая колонка не отображается пока ей не поставишь ширину 100%?  Разве она не должна подстраиваться под размер автоматом? вот мой код https://jsfiddle.net/gzf1hkc0/  в нем navbar с двумя колонками. проблема со второй колонкой. пс. в коде уже стоит ширина второй колонки 100%, но как я понимаю самому прописывать ее не надо и раз так может я что то не так сделал? заранее спасибо за то что уделили внимание моему вопросу)   
    • А как должен выглядеть не типовой сайт? Можете пример показать?
  • Popular Contributors