$x = array (1, 1, 2, 3, 4, 3 , 3, 3);
$y = array (2, 3, 1);
$z = array_unique(array_intersect($x, $y))+array_unique(array_diff($x, $y));
<?hh // strict
namespace mynamespace\Uri;
abstract class UriAbstract
{
protected string $_scheme = '';
public static function factory(string $uri = 'http') : UriAbstract {
$aUri = explode(':', $uri, 2);
$scheme = (string)strtolower($aUri[0]);
if ( strlen($scheme) === 0 ) {
// throw Exception
}
if ( ctype_alnum($scheme) === false ) {
// throw Exception
}
switch ($scheme) {
case 'http':
case 'https':
$schemeHandler = new Http(); // Корень проблемы
break;
default:
throw new \Exception('Undefined scheme.');
}
invariant($schemeHandler instanceof UriAbstract, 'Instance of UriAbstract expected.'); // не обязательно, но лучше убедиться, что имеем "правильного" наследника.
return $schemeHandler;
}
}
// --------------
namespace mynamespace\Uri;
class Http extends UriAbstract {};