Reputation: 1564
What are the best practices for usage of PHP’s Magic Constants, such as __LINE__
, __FILE__
, __FUNCTION__
, __CLASS__
and __METHOD__
?
For example I use __LINE__
and __CLASS__
to locate the SQL Error like this :
$result = mysql_query($query)
or die("Error SQL line ".__LINE__ ." class ".__CLASS__." : ".mysql_error());
Is this an acceptable practice?
Upvotes: 6
Views: 3414
Reputation: 449415
The practice you show has two shortcomings:
You are not showing the file the error occurs in - you'd have to have a very strict file structure that maps classes to files 1:1 for this to be useful
__CLASS__
will show you the wrong result if the error occurs in an inherited class. Use get_class($this)
to get the actual current class.
Other than that, using these constants is perfectly acceptable. Note that
__FUNCTION__
and __CLASS__
were added in PHP 4.3
__METHOD__
is available since PHP 5.0.0
__DIR__
and __NAMESPACE__
are available since PHP 5.3.
Upvotes: 2
Reputation: 18964
The only advice I can give is that not all magic constants are defined. So, when in doubt, use if(defined('__MAGIC_CONSTANT__'))
Upvotes: 1
Reputation: 55334
The purpose for these constants is debugging and logging. This is exactly what you are doing.
__FILE__
can also be used for relative file paths (e.g. dirname(__FILE__)
).
Upvotes: 1