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
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
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)