Все языки OOP поддерживают наличие переменной, ссылающейся на объект. Но некоторые языки также поддерживают наличие переменной, ссылающейся на класс (тип ссылки на класс). Скажем, у меня есть метод, который будет принимать объект или класс в качестве параметра. Что бы я назвал параметром? Другими словами, есть ли термин, который одновременно инкапсулирует «объект» и «класс»?
Для дальнейшего пояснения, вот некоторый (иначе бесполезный) код PHP, который иллюстрирует, что я имею в виду под ссылкой на класс против ссылки на объект :
<?php
class Foo {
public function shout(string $message) {
echo strtoupper("$message\n");
}
}
class Bar {
public function shout(string $message) {
echo "!!! $message !!!\n";
}
}
/**
* @param mixed $classOrObject
*/
function shoutOut($classOrObject) {
if (is_object($classOrObject)) {
$classOrObject->shout('I got an object');
} elseif (is_string($classOrObject)) {
$object = new $classOrObject();
$object->shout('I got a class');
}
}
shoutOut(new Foo());
shoutOut(Bar::class);
Таким образом, перефразировать вопрос можно следующим образом:
Как лучше назвать параметр $ classOrObject?
В качестве третьего Попытайтесь найти то, что я действительно здесь хочу, представьте, что вы пишете введение в OOP. Вы могли бы сказать что-то вроде
Основными компонентами парадигмы OOP являются класс и объект.
Так что, если бы мы заменили «основные ингредиенты» на более теоретически точный термин, мой вопрос, что бы это был за термин? Если бы классы были яблоками, а предметы - грушами, мы бы назвали их обоих "фруктами". Но классы и объекты не являются фруктами, так как мы их называем?