PHP
Par PlaceOweb le samedi, décembre 5 2009, 16:07 - PHP - Lien permanent
Quelques informations utiles au sujet de PHP
Comment détecter le système d'exploitation du serveur PHP ?
La constante PHP_OS ou la fonction php_uname permettent de déterminer l'OS
echo PHP_OS; // Windows_NT // WINNT // Linux
Constantes pré-définies
Grasse aux constantes prédéfinies, on peut utiliser sans connaître les séparateurs de chemin, dossier, fichier, fin de ligne etc...
| Constantes prédéfinies | Valeur sur Windows (WampServer 2.0) | Valeur sur Linux (Debian) | Description |
|---|---|---|---|
| PHP_VERSION | 5.3.0 | 5.3.1-0.dotdeb.0 | Version de PHP |
| PHP_OS | WINNT | Linux | Le système d'exploitation (Windows, Linux, ...) |
| PHP_EOL | \r\n | \n | EndOfLine : Le séparateur de fin de ligne |
| DIRECTORY_SEPARATOR | \ | / | Le séparateur de dossiers |
| PATH_SEPARATOR | ; | : | Le séparateur de dossiers à inclure (include_path) |
Voyez aussi Les constantes PHP PHP_OS et PHP_EOL qui font partie des constantes pré-définies dans le cœur de PHP.
Et pour connaître toutes les constantes pré-définies sur votre serveur php, utilisez la fonction get_defined_constants().
Identiquement on peut lister les fonctions prédéfinies (internal) et que l'on a créer soi (user) de PHP avec get_defined_functions() et les variables déclarées (dans le contexte ou portée) avec get_defined_vars()
print_r(get_defined_constants()); print_r(get_defined_functions()); print_r(get_defined_vars());
Par contre, il est impossible de lister les constantes de vos classes, selon l'exemple Get the value of a PHP constant dynamically on peut rechercher si elle est définie :
if(defined(self::MA_CONST)) {
Pour obtenir la liste de vos constantes de classes vous devrez ajouter une méthode dans vos classes comme l'indique php.net
public function get_class_constants() { $reflect = new ReflectionClass(get_class($this)); return $reflect->getConstants(); }
Illustration pour connaitre les attributs possibles de la classe PDO déclaré dans ses constantes :
class PdoExtend extends PDO { static public function get_class_constants() { $reflect = new ReflectionClass(get_class()); return $reflect->getConstants(); } } $constantesPdo = PdoExtend::get_class_constants(); echo "PDO class : -----------------------------------------------------------------------------\n"; foreach( $constantesPdo as $constName => $constValue ) { if( preg_match('/ATTR_/', $constName) ) { echo $constName . " : constValue : "; try { var_dump($constValue); } catch (Exception $e) { echo "Exception : " . $e->getMessage() . "\n"; } } } //var_dump(PdoSql::getInstance()->setAttribute(PDO::ATTR_TIMEOUT,3 )); //var_dump(PdoSql::getInstance()->getAttribute(PDO::ATTR_TIMEOUT )); // SQLSTATE[IM001]: Driver does not support this function: driver does not support that attribute echo "PDO instancié : -----------------------------------------------------------------------------\n"; foreach( $constantesPdo as $constName => $constValue ) { if( preg_match('/ATTR_/', $constName) ) { echo $constName . " : "; try { $constValue = PdoSql::getInstance()->getAttribute($constValue); var_dump($constValue); } catch (Exception $e) { echo "Exception : " . $e->getMessage() . "\n"; } } } // Avec une connexion paramétrées avec ces options // $pdo_sql_options = array( // PDO::ATTR_TIMEOUT => 3 , // PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8' // en remplacement de : self::$instance->exec("SET NAMES 'utf8'"); // // PDO::ATTR_PERSISTENT => true // Table 'tmp' already exists' => Ajout de : DROP TABLE IF EXISTS // ); // self::$instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Le résultat est le suivant //PDO class : ----------------------------------------------------------------------------- //ATTR_AUTOCOMMIT : constValue : int(0) //ATTR_PREFETCH : constValue : int(1) //ATTR_TIMEOUT : constValue : int(2) //ATTR_ERRMODE : constValue : int(3) //ATTR_SERVER_VERSION : constValue : int(4) //ATTR_CLIENT_VERSION : constValue : int(5) //ATTR_SERVER_INFO : constValue : int(6) //ATTR_CONNECTION_STATUS : constValue : int(7) //ATTR_CASE : constValue : int(8) //ATTR_CURSOR_NAME : constValue : int(9) //ATTR_CURSOR : constValue : int(10) //ATTR_ORACLE_NULLS : constValue : int(11) //ATTR_PERSISTENT : constValue : int(12) //ATTR_STATEMENT_CLASS : constValue : int(13) //ATTR_FETCH_TABLE_NAMES : constValue : int(14) //ATTR_FETCH_CATALOG_NAMES : constValue : int(15) //ATTR_DRIVER_NAME : constValue : int(16) //ATTR_STRINGIFY_FETCHES : constValue : int(17) //ATTR_MAX_COLUMN_LEN : constValue : int(18) //ATTR_EMULATE_PREPARES : constValue : int(20) //ATTR_DEFAULT_FETCH_MODE : constValue : int(19) //MYSQL_ATTR_USE_BUFFERED_QUERY : constValue : int(1000) //MYSQL_ATTR_LOCAL_INFILE : constValue : int(1001) //MYSQL_ATTR_INIT_COMMAND : constValue : int(1002) //MYSQL_ATTR_DIRECT_QUERY : constValue : int(1003) //MYSQL_ATTR_FOUND_ROWS : constValue : int(1004) //MYSQL_ATTR_IGNORE_SPACE : constValue : int(1005) //ODBC_ATTR_USE_CURSOR_LIBRARY : constValue : int(1000) //ODBC_ATTR_ASSUME_UTF8 : constValue : int(1001) //PDO instancié : ----------------------------------------------------------------------------- //ATTR_AUTOCOMMIT : int(1) //ATTR_PREFETCH : Exception : SQLSTATE[IM001]: Driver does not support this function: driver does not support that attribute //ATTR_TIMEOUT : Exception : SQLSTATE[IM001]: Driver does not support this function: driver does not support that attribute //ATTR_ERRMODE : int(2) //ATTR_SERVER_VERSION : string(21) "5.1.51-0.dotdeb.1-log" //ATTR_CLIENT_VERSION : string(48) "mysqlnd 5.0.7-dev - 091210 - $Revision: 300533 $" //ATTR_SERVER_INFO : string(147) "Uptime: 192729 Threads: 2 Questions: 5231025 Slow queries: 9478 Opens: 570986 Flush tables: 1 Open tables: 64 Queries per second avg: 27.141" //ATTR_CONNECTION_STATUS : string(24) "mysql.placeoweb.com via TCP/IP" //ATTR_CASE : int(0) //ATTR_CURSOR_NAME : Exception : SQLSTATE[IM001]: Driver does not support this function: driver does not support that attribute //ATTR_CURSOR : Exception : SQLSTATE[IM001]: Driver does not support this function: driver does not support that attribute //ATTR_ORACLE_NULLS : int(0) //ATTR_PERSISTENT : bool(false) //ATTR_STATEMENT_CLASS : array(1) { // [0]=> // string(12) "PDOStatement" //} //ATTR_FETCH_TABLE_NAMES : Exception : SQLSTATE[IM001]: Driver does not support this function: driver does not support that attribute //ATTR_FETCH_CATALOG_NAMES : Exception : SQLSTATE[IM001]: Driver does not support this function: driver does not support that attribute //ATTR_DRIVER_NAME : string(5) "mysql" //ATTR_STRINGIFY_FETCHES : Exception : SQLSTATE[IM001]: Driver does not support this function: driver does not support that attribute //ATTR_MAX_COLUMN_LEN : Exception : SQLSTATE[IM001]: Driver does not support this function: driver does not support that attribute //ATTR_EMULATE_PREPARES : Exception : SQLSTATE[IM001]: Driver does not support this function: driver does not support that attribute //ATTR_DEFAULT_FETCH_MODE : int(4) //MYSQL_ATTR_USE_BUFFERED_QUERY : int(1) //MYSQL_ATTR_LOCAL_INFILE : Exception : SQLSTATE[IM001]: Driver does not support this function: driver does not support that attribute //MYSQL_ATTR_INIT_COMMAND : Exception : SQLSTATE[IM001]: Driver does not support this function: driver does not support that attribute //MYSQL_ATTR_DIRECT_QUERY : int(1) //MYSQL_ATTR_FOUND_ROWS : Exception : SQLSTATE[IM001]: Driver does not support this function: driver does not support that attribute //MYSQL_ATTR_IGNORE_SPACE : Exception : SQLSTATE[IM001]: Driver does not support this function: driver does not support that attribute //ODBC_ATTR_USE_CURSOR_LIBRARY : int(1) //ODBC_ATTR_ASSUME_UTF8 : Exception : SQLSTATE[IM001]: Driver does not support this function: driver does not support that attribute
Constantes magiques
- __LINE__ La ligne courante dans le fichier.
- __FILE__ Le chemin complet et le nom du fichier courant.
- __DIR__ Le dossier du fichier.
- __FUNCTION__ Le nom de la fonction.
- __CLASS__ Le nom de la classe courante.
- __METHOD__ Le nom de la méthode courante.
- __NAMESPACE__ Le nom de l'espace de noms courant.
Différence entre ::, ->, self et. $this
- PHP - Object Oriented Programming :: vs. ->, self vs. $this
Pour les gens qui confondent la différence entre :: et -> ou self et $this, Je vous présentes les règles :
- Si la variable ou la méthode référencée est déclarée en tant const ou static vous devez utiliser l'opérateur ::
- Si la variable ou la méthode référencée n'est pas déclarée en tant const ou static vous devez utiliser l'opérateur ->
- Si vous accédez à une variable const ou static variable / méthode dans une classe, vous devez utiliser la référence self
- Si vous accédez à une variable ou méthode qui n'est ni const ni static, vous devez utiliser la référence $this
Plus d'information sur les classes php :
- Les classes et les objets
- Propriétés Au sein des méthodes de classes, les propriétés, constantes et méthodes peuvent être appellées en utilisant la forme $this->property (où property est le nom de la propriété), à moins que l'appel se fasse sur une propriété statique dans une méthode de classe statique, auquel cas l'accès se fait en utilisant la forme self::$property.
- Constantes de classe Définir des valeurs constantes à l'intérieur d'une classe. Depuis PHP 5.3.0, il est possible de référencer une classe en utilisant une variable. La valeur de la variable ne peut être un mot-clé (e.g. self, parent et static).
- Statique Si aucune déclaration de visibilité (public, protected ou private) n'est spécifiée, alors la propriété ou la méthode sera automatiquement spécifiée comme public.
- L'opérateur de résolution de portée (::) Deux mots-clé spéciaux, self et parent, sont utilisés pour accéder aux propriétés ou aux méthodes depuis la définition de la classe.
- Méthodes magiques Les méthodes __construct, __destruct, __call, __callStatic, __get, __set, __isset, __unset, __sleep, __wakeup, __toString, __invoke, __set_state et __clone sont magiques en PHP.