<?php
/** @var bool */
public $exit = true;
/** @var bool */
public $exitFullUsage = false;
/** @var bool */
public $help = true;
/** @var bool */
public $optionsFirst = false;
/** @var ?string */
public $version;
это объявлены свойства, которые можно будет получить через $object->{ $name }; (потому как они помечены как публичные)
для удобства работы в PhpStorm и чтения указаны их типы данных, когда часто работаешь с кодом позволяет не тратить время на то, чтобы долго не вкуривать и не разбираться. Достаточно знать что там лежит.
<?php
public function __construct($options=array())
{
foreach ($options as $k=>$v) {
$this->$k = $v;
}
}
На вход бросается массив, который потом проходится по очереди каждый элемент и втыкивается в свойства которые обьявлены выше. Доллар после стрелки означает что само имя должно быть подставлено.
Но код косячный потому что пхп позволяет обьявлять свойства динамически. То есть даже если поля нет, его можно передать и оно появится. Надо проверять еще
<?php
if (! property_exists($this, $k)) throw new \Exception('Нет свойства');