PHP 5.6.0beta1 released

Lista cuvintelor-cheie

Aceste cuvinte au o semnificație specială în PHP. Unele din ele se aseamănă cu funcții, altele cu constante ș.a.m.d., însă aceasta nu este așa: ele sunt construcții ale limbajului. Nu puteți utiliza cuvintele ce urmează ca constante, denumiri ale claselor, funcțiilor sau metodelor. Utilizarea lor ca denumiri ale variabilelor este în general OK, dar poate duce la confuzie.

Cuvinte-cheie PHP
abstract (începând cu PHP 5) and array() as break
case catch (începând cu PHP 5) cfunction (doar PHP 4) class clone (începând cu PHP 5)
const continue declare default do
else elseif enddeclare endfor endforeach
endif endswitch endwhile extends final (începând cu PHP 5)
for foreach function global goto (începând cu PHP 5.3)
if implements (începând cu PHP 5) interface (începând cu PHP 5) instanceof (începând cu PHP 5)
namespace (începând cu PHP 5.3) new old_function (doar PHP 4) or private (începând cu PHP 5)
protected (începând cu PHP 5) public (începând cu PHP 5) static switch throw (începând cu PHP 5)
try (începând cu PHP 5) use var while xor
Constante la compilare
__CLASS__ __DIR__ (începând cu PHP 5.3) __FILE__ __LINE__ __FUNCTION__ __METHOD__
__NAMESPACE__ (începând cu PHP 5.3)
Construcții ale limbajului
die() echo empty() exit() eval()
include include_once isset() list() require
require_once return print unset() __halt_compiler()
add a note add a note

User Contributed Notes 3 notes

up
11
Chris
1 year ago
Here they are as arrays:

<?php
$keywords
= array('__halt_compiler', 'abstract', 'and', 'array', 'as', 'break', 'callable', 'case', 'catch', 'class', 'clone', 'const', 'continue', 'declare', 'default', 'die', 'do', 'echo', 'else', 'elseif', 'empty', 'enddeclare', 'endfor', 'endforeach', 'endif', 'endswitch', 'endwhile', 'eval', 'exit', 'extends', 'final', 'for', 'foreach', 'function', 'global', 'goto', 'if', 'implements', 'include', 'include_once', 'instanceof', 'insteadof', 'interface', 'isset', 'list', 'namespace', 'new', 'or', 'print', 'private', 'protected', 'public', 'require', 'require_once', 'return', 'static', 'switch', 'throw', 'trait', 'try', 'unset', 'use', 'var', 'while', 'xor');

$predefined_constants = array('__CLASS__', '__DIR__', '__FILE__', '__FUNCTION__', '__LINE__', '__METHOD__', '__NAMESPACE__', '__TRAIT__');
?>

Along with get_defined_functions() and get_defined_constants(), this can be useful for checking eval() statements.
up
7
martindilling at gmail dot com
1 year ago
RegEx to find all the keywords:

\b(
(a(bstract|nd|rray|s))|
(c(a(llable|se|tch)|l(ass|one)|on(st|tinue)))|
(d(e(clare|fault)|ie|o))|
(e(cho|lse(if)?|mpty|nd(declare|for(each)?|if|switch|while)|val|x(it|tends)))|
(f(inal|or(each)?|unction))|
(g(lobal|oto))|
(i(f|mplements|n(clude(_once)?|st(anceof|eadof)|terface)|sset))|
(n(amespace|ew))|
(p(r(i(nt|vate)|otected)|ublic))|
(re(quire(_once)?|turn))|
(s(tatic|witch))|
(t(hrow|r(ait|y)))|
(u(nset|se))|
(__halt_compiler|break|list|(x)?or|var|while)
)\b
up
1
Bob
4 years ago
There are some cases when you need to use a reserved keyword or language construct as a class method name. In this instance, there is very little chance of namespace conflicts (as the class itself acts as a namespace). If you try to define the method the old way, you will get an unexpected token error.

There is an unobtrusive, and very useful way to use a reserved keyword for a method name. For example, you want to define two class methods 'list' and 'unset' (these two are language builtins and normally not allowed for method names).

<?php
class MyClass
{
   
// Define MyClass::unset() with a different name, e.g. 'rm'
   
public function rm($arg)
    {
       
/* code... */
   
}
   
// Define MyClass::list() with a different name, e.g. 'ls'
   
public function ls($arg = null)
    {
       
/* code... */
   
}
   
// Now define a __call() method (requires PHP > 5.2.3 to take effect)
   
public function __call($func, $args)
    {
        switch (
$func)
        {
            case
'list':
                return
$this->ls((isset($args[0]))? $args[0]: null);
            break;
            case
'unset':
                return
$this->rm($args[0]);
            break;
            default:
               
trigger_error("Call to undefined method ".__CLASS__."::$func()", E_USER_ERROR);
            die ();
        }
    }
}
?>

The only caveat is that to use the long method names, you need PHP > 5.2.3. However, a nice feature is that if you are using an older version than 5.2.3, all of the __call() stuff is ignored and the class will behave as expected (in other words, it degrades gracefully).

You also need to be aware of the methods' expected arguments. MyClass::ls()'s argument is optional, so the extra isset() check is required. If your methods take more arguments, they will need to be manually dereferenced from the $args array, e.g. <?php return $this->my_func($args[0], $args[1], $args[2]);?> for 3 required arguments.

This is a nice trick, and can let you code better APIs for newer versions of PHP. However, if this script is to be run on older PHP installations, be very sure to use the short method names.
To Top