Portál AbcLinuxu, 13. července 2025 02:52


Dotaz: PHP: $this ve funkci pro nastavení nepovinného parametru

29.5.2013 01:33 Pinon | skóre: 7
PHP: $this ve funkci pro nastavení nepovinného parametru
Přečteno: 416×
Odpovědět | Admin

Zdravím, mám následující problém. Vytvořil jsem si (a zde pro zjednodušení oškubal co to šlo) třídu, která bude logovat nějaký message do databáze, souboru atd. Vytvářil jsem si tuto třídu:

class logging {
	public $log_file;
	public $save_in_db;
	...

	public function __construct($log_file)
	{
		$this->log_file = $log_file;
		$this->save_in_db = true;	// Defaultně se zpráva bude ukládat do databáze
		...
	}
	
	public function write($message, $save_in_db = $this->save_in_db)
	{
		if($save_in_db){
			// Uložit do DB
		}
	...
Mám představu, že defaultně se zpráva bude ukládat do databáze. Když zavolám funkci write s jedním parametrem, $save_in_db se automaticky nastaví na true a zpráva se uloží. Když ale zavolám funkci s druhým parametrem, který bude false, tak se zpráva neuloží. Bohužel když do funkce dám $this->neco, tak mi php skončí s chybou; PHP Parse error: syntax error, unexpected T_VARIABLE in /var/www/html/scripts/class/logging.class.php on line 34 a já nevím proč, protože logicky by to mělo fungovat. Díky za rady..


Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 2× (blondak, DarkKnightCZ)
29.5.2013 08:55 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: PHP: $this ve funkci pro nastavení nepovinného parametru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tam jedině konstantu, pokud to chceš takto, můžeš to upravit třeba v duchu:
  public function write($message, $save_in_db = NULL){
    if(is_null($save_in_db))
      $save_in_db = $this->save_in_db;
    if($save_in_db){
      echo 'save';
    }
  }
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
30.5.2013 20:43 Kozzi
Rozbalit Rozbalit vše Re: PHP: $this ve funkci pro nastavení nepovinného parametru
No podle me pokud se to ma defaultne ukladat, tak bych se zcela vykaslal na tu promenou $this->save_in_db a rovnou nastavil nepoviny parametr $save_in_db na true.

Takze spravnejsi reseni je;
class logging {
	public $log_file;
	...

	public function __construct($log_file)
	{
		$this->log_file = $log_file;
		...
	}
	
	public function write($message, $save_in_db = true)
	{
		if($save_in_db){
			// Uložit do DB
		}
	...
30.5.2013 22:41 DarkKnightCZ | skóre: 12
Rozbalit Rozbalit vše Re: PHP: $this ve funkci pro nastavení nepovinného parametru

no asi by se to spravne melo ukladat do predvoleneho typu :) proc pak volat tu metodu pokazde s jednim parametrem navic?

31.5.2013 08:03 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: PHP: $this ve funkci pro nastavení nepovinného parametru
Za správnější řešení bych si troufl označit jen, řešení
public function write($message);
, následné:
public function write($message, $save_in_db = true);
bych tedy já označil za špatné - sorry (minimálně dělající něco jiného).
Důvod je prostý,kód z dotazu řeší, přednastavenou hodnotu např. z konfigurace a ta může být on nebo off a k tomu nezávislé přepsání hodnoty, na jakoukoliv hodnotu (tedy argument funkce má být „three bool“).
Takže pokud to není (v původním dotazu) z důvodů „závažnosti“ hlášení tedy klasické „severity“ přiřazené hlášení (algoritmicky nebo argumentem) a „log“ objekt má definovaný aktuální level, kterým se řídí, tak bych napsal dvě funkce, třeba:
public function write($message){
}
public function writeForce($message,$save_in_db){
}
bez nepovinných parametrů a možná obě opřel privátní fce writeMsg(), writeMsgToDb() - ale to už jsme moc daleko…
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
31.5.2013 12:24 Kozzi
Rozbalit Rozbalit vše Re: PHP: $this ve funkci pro nastavení nepovinného parametru
Pravda ctu si tou ptazku jeste jednou, poprve jsem z toho pochopil ze chce jen defaultne ukladat do db a v pripade druheho parametru neukladat, az ted jsem si vsiml ze mu slo o to aby se mu nastavil stav, ktery to bude ridit.
31.5.2013 12:44 Kit
Rozbalit Rozbalit vše Re: PHP: $this ve funkci pro nastavení nepovinného parametru
V tom případě by stačilo jen upravit konstruktor nebo přidat jeden setter.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.