Anonymní profil Jarda – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Jarda – Programujte.comAnonymní profil Jarda – Programujte.com

 

Příspěvky odeslané z IP adresy 82.142.65.–

PHP › Jak nastavit error_reportin…
7. 8. 2008   #82217

Zajímavé články, s prvním nesouhlasím, resp. souhlasím s Larsem Strojnym a bukajem :)
Btw, já to řeším nějak takhle, pokud chci třídu která bude mít možnost setovat property tak ji udělám potomkem
této třídy. Nic však není dokonalé ;)

minusy:
- setters/getters fungují i na privátní properties (funkce property_exists() nerozlišuje)
- zpomalení

Co si o takovém řešení myslíte?




class Core_ObjectWithProperties
{
/**
* Toto je __stub funkce pro settery a gettery tridy.
* Problem - public/private, da se nastavit i private
*/
function __call($fcename,$args)
{
$fce=substr($fcename,0,3);
$var=strtolower(substr($fcename,3,1)).substr($fcename,4);
$cnt=count($args);

switch($fce)
{
case 'set':
if($cnt != 1)
throw(new Exception("setter $fcename() needs exactly ONE parameter!"));

if(!property_exists($this,$var))
throw(new Exception("$fcename() - class variable \$$var does not exists!"));

$this->$var = $args[0];

break;
case 'get':
if($cnt != 0)
throw(new Exception("getter $fcename() does not take any parameter!"));
if(!property_exists($this,$var))
throw(new Exception("$fcename() - class variable \$$var does not exists!"));

return $this->$var;

break;
default:
throw(new Exception("unknown method called: $fcename()"));

}
}

}

PHP › Jak nastavit error_reportin…
7. 8. 2008   #82197

To zaachi :
To bukaj :

(zaregistroval jsem se pod nickem Jasir, tedy Jarda ~ Jasir;)

Panové, děkuji, vidím, že budu dělat spoustu překlepů i nadále. :(
V tomto je PHP opravdu s prominutím na prd.

Jak to vidím já, nejlepší je zřejmě vůbec nepřistupovat k veřejným vlastnostem (proměnným :)
pomocí $obj->vlastnost ale pro každou vlastnost vytvořit get/set metody. Je to práce navíc, mírné zpomalení,
na druhou stranu z hlediska návrhu to není vůbec špatné.

Co se týče privátních vlastností, tam to jde v podstatě také, ale už je to docela opruz vyrábět get/set
metody, takže buďto maximálně zvýšená opatrnost, a nebo opravdu pro každý objekt vytvořit __get(), __set() metody s hláškou chyby/překlepu.

Jarda
PHP › Jak nastavit error_reportin…
6. 8. 2008   #82113

To bukaj :
Bohuzel zadna zmena, stale žádná hláška. Dost mě to štve kvůli snadnému zanesení chyby díky překlepu -
chci nastavit proměnnou například width pomocí $this->widht a php mě na překlep neupozorní.

Pokud se pokusim pouzit neinicializovanou promennou,
např.



echo $neinicializovanaPromenna;

vrátí to notice 'Undefined variable', takže jinak error_reporting funguje dobře.

Jarda
PHP › Jak nastavit error_reportin…
6. 8. 2008   #82101

Ahoj,

nejak se mi nedaří nastavit error_reporting() (nebo ini_set('error_reporting',...)
tak, aby vypsal Warning o pristupu k neexistujici promenne.

Priklad:




error_reporting(E_ALL | E_STRICT | E_NOTICE);
class A
{
public $promenna;

function __construct()
{
$this->neexistujici_promenna = "nic";
}
}
$obj = new A();


Tento priklad mi nevypíše žádnou chybu/varování/notice...

Předem děkuji...

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý