Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
interface A {
static function make(): A;
}
class B implements A {
static function make(): B { // must exactly match parent; this will error
return new B();
}
}
class AbstractRepository<T>
{
public function find($id): ?T
{
...
}
....
}
class AbstractRepository
{
public function find($id): EntityInterface
{
...
}
....
}
class UserRepository extends AbstractRepository
{
public function find($id): User
{
...
}
....
}
public interface A {
public A create();
}
...
public class HelloWorld implements A
{
public static void main(String []args){
HelloWorld a = new HelloWorld();
a.create();
}
public HelloWorld create() {
return this;
}
}
public function some(SplFixedArray|null $any)
{
}
<?php
$i = int(23.0);
$f = float("asdasdasd");
class Test
{
public static function printInt(int $i)
{
echo $i . "\n";
}
public static function printFloat(float $i)
{
echo $i . "\n";
}
}
Test::printInt($i); // 23
Test::printFloat($f); // 0.0
<?php
abstract class number
{
protected $value;
public function __construct($val)
{
$this->value = $val;
}
public function __toString() { return (string)$this->value; }
}
class int extends number
{
public function __construct($v) { parent::__construct((int)$v); }
}
class float extends number
{
public function __construct($v) { parent::__construct((float)$v); }
}
function int($v) { return new int($v); }
function float($v) { return new float($v); }
echo $i + $f;
if ($f)
{
echo $f;
}
Это означает, что ваши методы и функции, которые возвращают подобные значения по-прежнему останутся в исходном состоянии.
Вы можете это исправить это путем возврата экземпляров обертки для подобных значений, но это будет ненужным извращением в большинстве случаев.
$a = new Bool;
if ($a)
Приговор «код, который я написал 10 лет назад, по-прежнему должен запускаться сегодня и должна быть возможность выполнить его через 10 лет»
другой альтернативы исправить php api, я не вижу.
> нельзя будет определить возврат нескольких типов.
Есть языки где это возможно?
func minMax(array: [Int]) -> (min: Int, max: Int) {
var currentMin = array[0]
var currentMax = array[0]
for value in array[1..<array.count] {
if value < currentMin {
currentMin = value
} else if value > currentMax {
currentMax = value
}
}
return (currentMin, currentMax)
}
Революция PHP7: Типы возвращаемых значений и удаление артефактов