Есть ли возможность использовать «типы данных» в php?
У меня есть класс Page, у него есть переменные (я использую public, мне не нужен private в моем случае, нет угрозы безопасности и т. Д.). Я создаю несколько объектов моего класса, добавляю их в массив, а затем для каждого и я хочу использование повторный объект в foreach, как мой объект Page. Итак, я хочу сообщить, что мой ide (PhpStorm) знает, что объект из массива имеет тип Page, поэтому он может прошептать мне свои переменные.
На Java я бы сделал что-то подобное (Page) myObject. Чем идея знает: «Программист из Juhuu говорит, что myObject должен быть типом страницы, поэтому я позволил ему работать с ним как с объектом Page, а не как с каким-то общим объектом»
Код ниже должен объяснить больше мою проблему:
НОТА:
Я знаю, что могу писать на странице foreach -> $ url; и это будет работать. Но как, черт возьми, я должен помнить все имена переменных. Скорее всего, я не хочу их помнить или искать, я хочу, чтобы они шептали.
class Page {
public $url;
public $array_of_titles;
//...
function __construct($url,$tit) {
$this->url = $url;
$this->array_of_titles = $tit;
}
}
$array_of_pages = array();
$url = "http://..."$tit = {"aaa", "bbb", "ccc"}
$page = new Page($url, $tit);
$array_of_pages[] = $page;
//... add more pages to the array
foreach($array_of_pages as $page) {
$my_url = $page->url; //this words but don't whisper obviously
//because in $page could by any object
//$my_url = (Page)$page->url; //this I would do in java to say
//"Hey $page is typeof Page man, I wanna whisper its methods"}
Используйте аннотацию @var следующим образом:
foreach($allPages as $page)
{
/*
* @var PageType $page
*/
$page->doesSomething();
}
@Var принимает тип класса и переменную, к которой он применяется, вы также можете указать, что массив является массивом классов, используя MyObjectType[]
при объявлении в классе или экземпляре (iirc).
Кроме того, используя private
а также protected
вместо public
больше о хорошем программировании, чем о безопасности, и я рекомендую вам прочитать о нем, а также о полиморфизме и наследовании.
Других решений пока нет …