Bir istisna için bir kod kullanma.

2 Cevap php

Ben İstisnalar her dilde aynı şekilde çalışmaz emin değilim, ama ben PHP kullanıyorum ve ben böyle bir şey yapıyorum zaman ben merak ediyorum:

if (!$this->connection[0]->query($this->query))
 throw new QueryFailedException($this->connection[0]->error);

İkinci parametre bir kod temini için bir ihtiyaç var mı? Örneğin:

if (!$this->connection[0]->query($this->query))
 throw new QueryFailedException($this->connection[0]->error,123);

Şimdi kodu 123 ... Ben bunun için bir ihtiyaç düşünemiyorum. Bir tane var mı? Bu durumda ileti sorgu içeren, istisna adından sana yararlı bir şey için kodu kullanabilirsiniz bir şey düşünemiyorum, istisna kendisi dosya, çizgi ve yığın izleme içeren durum türü, açıklıyor QueryFailedException, yani.

2 Cevap

Hata kodu daha ayrıntılı bilgi sağlamak için kullanılan bir alandır. Örneğin aynı durum oluşturabilir iki şey varsa, kodu daha ayrıntı vermek için kullanılan olabilir.

If you have an "error source" that works on error codes and you "promote" it to exceptions you can include the actual error code in the exception. a) it does no harm and b) maybe you do not want to have an exception class for each single error code that may or may not occur (and virtually no one cares for in a running system).
Let's take the MySQL server errors as an example. You could create one class for each of those codes

class MySQLException_ER_HASHCHK extends MySQLException
class MySQLException_ER_NISAMCHK extends MySQLException
class MySQLException_ER_NO extends MySQLException
class MySQLException_ER_YES extends MySQLException
class MySQLException_ER_CANT_CREATE_FILE extends MySQLException
class MySQLException_ER_CANT_CREATE_TABLE extends MySQLException
class MySQLException_ER_CANT_CREATE_DB extends MySQLException
class MySQLException_ER_DB_CREATE_EXISTS extends MySQLException
class MySQLException_ER_DB_DROP_EXISTS extends MySQLException
....

but in reality ...who cares? Who's really gonna catch them individually? In almost all cases there will only be a catch(MySQLException $mex) in the app's code and maybe, just maybe it's looking for one specific code where it makes little to no difference for the coder whether there are two catch-blocks or an if/switch block. Now you have a lot of "dead" classes and no one -except the parser- gives a damn about them. (on the other hand "everything worth doing is worth overdoing it")
And even if you do provide some granularity I think it makes little sense to go beyond e.g. having one exception class for each SQLState (does that make sense? sqlstate? don't know, just an example)

class MySQLException_HY000 extends MySQLException
class MySQLException_HY001 extends MySQLException
class MySQLException_XA100 extends MySQLException
class MySQLException_XA102 extends MySQLException

/ Hatta kod usually bunu değerlendirmek yoksa bile neden bu bilgileri kaybetmek - Ve sonra yine muhtemelen hata kodu eklemek istediğiniz?