I was trying to get my Netbeans to autocomplete with PHP, and I learned that this code is valid in PHP:
function blah(Bur $bur) {}
A couple of questions:
The values assigned to a PHP variable may be of different data types including simple string and numeric types to more complex data types like arrays and objects. PHP supports total eight primitive data types: Integer, Floating point number or Float, String, Booleans, Array, Object, resource and NULL.
Type declarations can be added to function arguments, return values, and, as of PHP 7.4. 0, class properties. They ensure that the value is of the specified type at call time, otherwise a TypeError is thrown. Note: When overriding a parent method, the child's method must match any return type declaration on the parent.
This type-hinting only works for validating function arguments; you can't declare that a PHP variable must always be of a certain type. This means that in your example, $bur must be of type Bur when "blah" is called, but $bur could be reassigned to a non-Bur value inside the function.
Type-hinting only works for class or interface names; you can't declare that an argument must be an integer, for example.
One annoying aspect of PHP's type-hinting, which is different from Java's, is that NULL values aren't allowed. So if you want the option of passing NULL instead of an object, you must remove the type-hint and do something like this at the top of the function:
assert('$bur === NULL || $bur instanceof Bur');
EDIT: This last paragraph doesn't apply since PHP 5.1; you can now use NULL as a default value, even with a type hint.
EDIT: You can also install the SPL Type Handling extension, which gives you wrapper types for strings, ints, floats, booleans, and enums.
EDIT: You can also use "array" since PHP 5.1, and "callable" since PHP 5.4.
EDIT: You can also use "string", "int", "float" and "bool" since PHP 7.0.
/** * @var string */ public $variable = "Blah";
UPDATE 2021: As of PHP 7 (which is several years old at this point) primitive types can also be declared for function arguments. Nullability can also be indicated with a ? in front of the type from 7.1 onward. You can declare return types now too. So this is valid PHP these days:
public function hasFoo(?int $numFoos) :bool {
phpStorm (my current preferred IDE) is happy to use all of these types for code completion, so I don't need as many phpDoc comments for typing as I used to.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With