Revision #37 has been created by
rackycz on Oct 14, 2025, 12:27:43 PM with the memo:
edit
« previous (#36) next (#38) »
Changes
Title
unchanged
Yii3 - How to start
Category
unchanged
Tutorials
Yii version
unchanged
3.0
Tags
unchanged
Content
changed
[...]
First of all, learn what [PHP Standards Recommendations](https://en.wikipedia.org/wiki/PHP_Standard_Recommendation) by [Framework Interoperability Group (FIG)](https://www.php-fig.org/psr) are. It will help you understand why so many "weird" PSR imports are in the Yii3 code. In short: These interfaces help authors of different frameworks to write compatible classes so they can be reused in any other framework following these principles.
## Dependency injection + container
Check [this YouTube video](https://www.youtube.com/watch?v=TqMXzEK0nsA) for explanation
## Cconstruct
vs I() and invoke
()
It may be confusing that some classes contain both methods
. Note that "property promotion" should be only used in `__construct()`.
Magic method `__invoke()` is only used if you create an instance and then use it as a function. Example if the reader does not have experiences with invoking. Just like me a few days ago. The `__invoke()` is called when you call the **instance** as a method. Like this:
```php
$obj = new MyObj(); // Now the __construct() is executed
.
$obj(); // Now the __invoke() is executed
```
To be honest, I still do not fully understand the real purpose of this situa (The instance is needed!)
```
I never used it, but prepared a following example that shows when invoking can be applied:
```php
class MyUpper
{
public function __invoke($a) { return $this->go($a); }
public function go($a) { return strtoupper($a); }
}
$instance = new MyUpper();
$array = ['a', 'B', 1, '1'];
var_dump($instance($array[0]));
var_dump(array_map($instance, $array)); // __invoke is used
// These do the same:
var_dump(array_map('strtoupper', $array));
var_dump(array_map([$instance, 'go'], $array));
var_dump(array_map(function($a) use ($instance) { return $instance->go($a); }, ['a','B',1,'1']));
```
Note that "property promotion" should be only used in `__construct()` just like the dependency injection.
## Hash annotations for class attributes
PHP 8 introduces annotations like this (not only for class attributes):
- `#[Column(type: 'primary')]`
- `#[Column(type: 'string(255)', nullable: true)]`
- `#[Entity(repository: UserRepository::class)]`[...]