Autor Zpráva
Fisak
Profil
Zdravím.. mám:
public function sqlDefaultTemplate($string) {
    $sql = $this->db->query_system("SELECT type, page, skin, inc FROM page where page = '".mypage("page")."'");
    $Data_TMP=mysql_fetch_assoc($sql);
    return $Data_TMP[$string];
}
a podmínku
if(!empty($this->sqlDefaultTemplate("page"))) {
a bohužel vypisuje mi to chybu v té podmínce: Can't use method return value in write context


nevíte kde může být chyba ?
Ugo
Profil
jestli se nepletu není to kritická chyba, nicméně v empty() a podobných nesmí být návratová hodnota, ale jedině přímá hodnota, takže jedině rozdělit, nejprve udělat proměnnou a tu pak zkontrolovat, případně udělat kontrolu už ve funkci a v případě selhání vracet false a to pak kontrolovat
Jan Tvrdík
Profil
Citace z dokumentace:

empty() only checks variables as anything else will result in a parse error. In other words, the following will not work: empty(trim($name)).

Tedy kód bys mohl upravit třeba takto
$tpl = $this->sqlDefaultTemplate("page");
if(!empty($tpl)) {
AM_
Profil
empty() je obdoba isset() a především se používá k ověření, že nějaká proměnná (, klíč pole nebo atribut objektu) existuje (resp. empty narozdíl od isset vrací true, pokud proměnná neexistuje nebo je její hodnota po přetypování na boolean rovna false).

V tomto případě musíš každopádně isset nebo empty už přímo v té funkci - pokud by $string odkazoval na neexistující klíč pole, bude to házet notice už v té funkci.

Dál pokud chceš ověřit, že třeba skin je prázdný string, měl bys to dělat pomocí if ($this->sqlDefaultTemplate("page") == '') a empty venku té funkce už nepoužívat.
ahoj
Profil *
AM:
Můžu se plést, ale vidím jako dost pravděpodobné, že když je ta podmínka splněna, je to $this->sqlDefaultTemplate("page") voláno znovu, aby ty hodnoty mohly být použito. Už proto bych preferoval to, co píše Jan Tvrdík
AM_
Profil
[#5] ahoj
to máš pravdu, to je další věc že tohle není úplně šťastný návrh - cítím z toho, že ten dotaz bude i tak na stránce volaný několikrát, bylo by vhodné výsledek cachovat a ne ho pokaždé s tou funkcí číst znovu z databáze.
Taky se samozřejmě dá napsat toto:
$page = $this->sqlDefaultTemplate("page");
if ($page == '')
Šlo mi o to, že používat empty jako porovnání proměnné na prázdný string je tak trochu nepěkné.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: