wtf? Using $this when not in object context

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
besir
Člen | 170
+
0
-

AHoj, vím co to po mě chce, ale netuším proč. Protože podle mě to prostě objekt je :D

Model ze kterého vytvářím objekt

<?php

namespace BesirCMS\models;
use \dibi,
    \Nette\Caching\Cache;

/**
 * Data model pro praci s daty nemovitosti
 *
 * @author Petr Besir Horacek - Webove aplikace na miru! <sirbesir@gmail.com>
 */
class Properties extends \Nette\Object
{

    /**
     * @var \DibiDatabase
     */
    private $database;


    public function __construct(\DibiConnection $database)
    {
        $this->setDatabase($database);
    }
// ...
    /**
     * Vybere z databaze data o nemovitostech dle parametru v $args
     *
     * @author Petr Besir Horacek <sirbesir@gmail.com>
     * @param \Nette\Caching\Storages\FileStorage $cacheStorage
     * @param array $args
     * @return dibi data object
     */
    public static function findProperties(\Nette\Caching\Storages\FileStorage $cacheStorage, $args)
    {
        $database = $this->getDatabase();  // na tenhle radek nadava ladenka

        $cache = new Cache($cacheStorage, 'PropertiesSearch');

        /*
         * nacteni dat z cache
         */
        $properties = $cache->load('search-'.implode('-',$args));

        if($properties === null)
        {
            $data = $database->select('*')
                            ->from('properties')
                            ->limit(3);

            /*
             * ulozeni vysledku do cache
             */
            $cache->save('search-'.implode('-',$args), $data, array(

                /*
                 * nastaveni tagu pro mazani cache
                 */
                Cache::TAGS => array('import'),

                /*
                 * nastaveni priority pro mazani cache
                 */
                Cache::PRIORITY => 50
            ));
            return $data;
        }
        return $properties;
    }

    public function getDatabase()
    {
        return $this->database;
    }

    public function setDatabase(\DibiConnection $database)
    {
        $this->database = $database;
    }

}

Presenter kde vytvářim objekt

<?php

namespace FrontModule;

use BesirCMS\models\Properties;

/**
 * Description of PropertiesPresenter
 *
 * @author Petr Besir Horacek - Webove aplikace na miru! <sirbesir@gmail.com>
 */
class PropertiesPresenter extends \FrontModule\FrontPresenter
{

    /**
    * (non-phpDoc)
    *
    * @see Nette\Application\Presenter#startup()
    */
    public function startup()
    {
        parent::startup();
    }

    public function actionBrowse($type, $category)
    {
        $properties = new Properties($this->context->database);
        $properties->findProperties($this->context->cacheStorage, null);
    }
}

Bud uz sem tak unavenej, nebo sem debil, doufam ze to prvni :D Diky.

Michal Vyšinský
Člen | 608
+
0
-

Proč máš metodu findProperties jako static? Ve static metodách není $this dostupné. A navíc voláš tu metodu normálně přes → takže static být snad nemusí ne?

Editoval CherryBoss (23. 9. 2012 11:16)

besir
Člen | 170
+
0
-

ja sem kokot :D to je právě to co sem neviděl a měl vidět :D asi přestanu pít, nebo budu víc spát :D díky! díky! a zase díky! je to prostě o sleposti, ona původně byla volána staticky, jde o přechod na dibi fluent :D díky!