Hướng dẫn php class parameters

class

Basic class definitions begin with the keyword class, followed by a class name, followed by a pair of curly braces which enclose the definitions of the properties and methods belonging to the class.

The class name can be any valid label, provided it is not a PHP reserved word. A valid class name starts with a letter or underscore, followed by any number of letters, numbers, or underscores. As a regular expression, it would be expressed thus: ^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$.

A class may contain its own constants, variables [called "properties"], and functions [called "methods"].

Example #1 Simple Class definition

The pseudo-variable $this is available when a method is called from within an object context. $this is the value of the calling object.

Warning

Calling a non-static method statically throws an Error. Prior to PHP 8.0.0, this would generate a deprecation notice, and $this would be undefined.

Example #2 Some examples of the $this pseudo-variable

Output of the above example in PHP 7:

$this is defined [A]

Deprecated: Non-static method A::foo[] should not be called statically in %s  on line 27
$this is not defined.

Deprecated: Non-static method A::foo[] should not be called statically in %s  on line 20
$this is not defined.

Deprecated: Non-static method B::bar[] should not be called statically in %s  on line 32

Deprecated: Non-static method A::foo[] should not be called statically in %s  on line 20
$this is not defined.

Output of the above example in PHP 8:

$this is defined [A]

Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27
Stack trace:
#0 {main}
  thrown in %s  on line 27

new

To create an instance of a class, the new keyword must be used. An object will always be created unless the object has a constructor defined that throws an exception on error. Classes should be defined before instantiation [and in some cases this is a requirement].

If a string containing the name of a class is used with new, a new instance of that class will be created. If the class is in a namespace, its fully qualified name must be used when doing this.

Note:

If there are no arguments to be passed to the class's constructor, parentheses after the class name may be omitted.

Example #3 Creating an instance

As of PHP 8.0.0, using new with arbitrary expressions is supported. This allows more complex instantiation if the expression produces a string. The expressions must be wrapped in parentheses.

Example #4 Creating an instance using an arbitrary expression

In the given example we show multiple examples of valid arbitrary expressions that produce a class name. This shows a call to a function, string concatenation, and the ::class constant.

Output of the above example in PHP 8:

object[ClassA]#1 [0] {
}
object[ClassB]#1 [0] {
}
object[ClassC]#1 [0] {
}
object[ClassD]#1 [0] {
}

In the class context, it is possible to create a new object by new self and new parent.

When assigning an already created instance of a class to a new variable, the new variable will access the same instance as the object that was assigned. This behaviour is the same when passing instances to a function. A copy of an already created object can be made by cloning it.

Example #5 Object Assignment

The above example will output:

NULL
NULL
object[SimpleClass]#1 [1] {
   ["var"]=>
     string[30] "$assigned will have this value"
}

It's possible to create instances of an object in a couple of ways:

Example #6 Creating new objects

The above example will output:

bool[true]
bool[true]
bool[true]

It is possible to access a member of a newly created object in a single expression:

Example #7 Access member of newly created object

The above example will output something similar to:

Note: Prior to PHP 7.1, the arguments are not evaluated if there is no constructor function defined.

Properties and methods

Class properties and methods live in separate "namespaces", so it is possible to have a property and a method with the same name. Referring to both a property and a method has the same notation, and whether a property will be accessed or a method will be called, solely depends on the context, i.e. whether the usage is a variable access or a function call.

Example #8 Property access vs. method call

The above example will output:

Extending class
a default value

Signature compatibility rules

When overriding a method, its signature must be compatible with the parent method. Otherwise, a fatal error is emitted, or, prior to PHP 8.0.0, an E_WARNING level error is generated. A signature is compatible if it respects the variance rules, makes a mandatory parameter optional, and if any new parameters are optional. This is known as the Liskov Substitution Principle, or LSP for short. The constructor, and private methods are exempt from these signature compatibility rules, and thus won't emit a fatal error in case of a signature mismatch.

Example #11 Compatible child methods

Chủ Đề