What i like on PHP 7.4
Meow

Meow @maymeow

Joined:
Jun 13, 2019

What i like on PHP 7.4

Publish Date: Oct 6 '20
1 2

Ok there is more what i like but this is biggest chages for me.

Maybe someone can tell me im crazy but i realy like strongly typed languages. And with 7.4 relase php is closer to them. (and more will come in 8.0) .

Now my Model classes can look like this

class UserIndexViewModel
{
    protected int $id;
    protected string $email;
    protected int $groupId;
    protected string $groupName;
    protected bool $isActive;
    protected bool $isAdmin;
    protected FrozenTime $created;
    protected FrozenTime $modified;

    /**
     * UserIndexViewModel constructor.
     * @param int $id
     * @param string $email
     * @param int $groupId
     * @param string $groupName
     * @param bool $isActive
     * @param bool $isAdmin
     * @param FrozenTime $created
     * @param FrozenTime $modified
     */
    private function __construct(int $id, string $email, int $groupId, string $groupName, bool $isActive, bool $isAdmin, FrozenTime $created, FrozenTime $modified)
    {
        $this->id = $id;
        $this->email = $email;
        $this->groupId = $groupId;
        $this->groupName = $groupName;
        $this->isActive = $isActive;
        $this->isAdmin = $isAdmin;
        $this->created = $created;
        $this->modified = $modified;
    }

    /**
     * @return int
     */
    public function getId(): int
    {
        return $this->id;
    }
// ...
}
Enter fullscreen mode Exit fullscreen mode

One think i missing now is array of objects. In 7.4 you can not define it. You define simply just array however it is here a workaround and it can be defined in doc blocks:

   /**
     * Returns populated array f ViewModel
     *
     * @param \Cake\Datasource\ResultSetInterface|\Iam\Model\Entity\User[] $data
     * @param IdentityInterface $identity
     * @return array|\Iam\ViewModel\UserIndexViewModel[]
     */
    public static function prepare(ResultSetInterface $data, IdentityInterface $identity) : array
Enter fullscreen mode Exit fullscreen mode

PHP 8.0 (which is in RC stage i think) will bring Union types, so that can change.

What do you think about PHP now? Do you like weakly typed or strongly typed languages more?

Comments 2 total

  • Catalin Ionut Titov
    Catalin Ionut TitovOct 11, 2020

    Why do you still use doc block if every property including the return type is type hinted? It's redudant.

    • Meow
      MeowNov 5, 2020

      They are rewritten functions (i used 7.3 before)... but sometimes i have to use them for example if my return type is Array of something.... i cant return function xy() : User[] but only function xy(): array so i add @return array|User[] to docblock...

      PS: and PhpStorm returns me errors when definition in docblock is missing... (i have to configure it to do not doing it)

Add comment