Короче говоря, это означает, что нет никаких ограничений на использование объекта. Это совпадает с любым другим объектом.
объект первого класса А является объектом, который может быть динамично создан, уничтожен, передан функции, возвратился как значение, и имейте все права, как другие переменные на языке программирования имеют.
В зависимости от языка, это может подразумевать:
- являющийся выразимым как анонимное литеральное значение
- , являющееся storable в переменных
- являющийся storable в структурах данных
- наличие внутренних идентификационных данных (независимый от любого имени)
- являющийся сопоставимым для равенства с другими объектами
- являющийся проходимым в качестве параметра к процедуре/функции
- , являющейся подлежащим возврату как результат процедуры/функции
- , являющейся конструируемым во времени выполнения
- являющийся печатаемым
- являющийся читаемым
- являющийся передающимся среди распределенных процессов
- являющийся storable внешними рабочими процессами
Источник .
В самих функциях C++ не объекты первого класса, однако:
В C++, классы не являются объектами первого класса, но экземпляры тех классов. В Python оба классы и объекты являются объектами первого класса. (См. этот ответ для получения дополнительной информации о классах как объекты).
Вот пример функций первого класса JavaScript:
// f: function that takes a number and returns a number
// deltaX: small positive number
// returns a function that is an approximate derivative of f
function makeDerivative( f, deltaX )
{
var deriv = function(x)
{
return ( f(x + deltaX) - f(x) )/ deltaX;
}
return deriv;
}
var cos = makeDerivative( Math.sin, 0.000001);
// cos(0) ~> 1
// cos(pi/2) ~> 0
Источник .
Объекты, которые не являются объектами первого класса, упоминаются как второразрядные объекты. Функции в C++ являются вторым классом, потому что они не могут быть динамично созданы.
Относительно редактирования:
РЕДАКТИРОВАНИЕ. Когда каждый говорит, что "все - объект" (как в Python), он действительно подразумевает, что "все первоклассно"?
термин объект может быть использован свободно и не подразумевает быть первым классом. И, вероятно, имело бы больше смысла называть целое понятие 'объектами первого класса'. Но в Python они действительно стремятся делать все первым классом. Я верю намерению человека, который сделал предназначенный первый класс Вашего оператора.
Странно, что var_dump не работает.
Но вы можете попробовать с другими инструментами отражения php.
<?php
Reflection::export(new ReflectionClass(get_class($data)));
?>
Или вы можете попробовать с помощью get_class_methods :
<?php
print_r(get_class_methods($data));
?>
или get_object_vars , чтобы увидеть его поля:
<?php
print_r(get_object_vars($data));
?>
Надеюсь, это поможет.
Вы можете использовать com_print_typeinfo() вместо var_dump(). Это должно работать для объектов COM, VARIANT и DOTNET. Вывод выглядит примерно так:
class IFile { /* GUID={C7C3F5A4-88A3-11D0-ABCB-00A0C90FFFC0} */ // some PHP-COM internal stuff ... /* DISPID=1610612736 */ function QueryInterface( /* VT_PTR [26] [in] --> ? [29] */ &$riid, /* VT_PTR [26] [out] --> VT_PTR [26] */ &$ppvObj ) { } /* DISPID=1610612737 */ /* VT_UI4 [19] */ function AddRef( ) { } // ... /* DISPID=1610678275 */ function Invoke( /* VT_I4 [3] [in] */ $dispidMember, /* VT_PTR [26] [in] --> ? [29] */ &$riid, /* VT_UI4 [19] [in] */ $lcid, /* VT_UI2 [18] [in] */ $wFlags, /* VT_PTR [26] [in] --> ? [29] */ &$pdispparams, /* VT_PTR [26] [out] --> VT_VARIANT [12] */ &$pvarResult, /* VT_PTR [26] [out] --> ? [29] */ &$pexcepinfo, /* VT_PTR [26] [out] --> VT_UINT [23] */ &$puArgErr ) { } // properties and methods of the COM object // ... /* DISPID=1001 */ /* VT_BSTR [8] */ /* Short name */ var $ShortName; /* DISPID=1004 */ /* VT_PTR [26] */ /* Get drive that contains file */ var $Drive; /* DISPID=1005 */ /* VT_PTR [26] */ /* Get folder that contains file */ var $ParentFolder; // ... /* DISPID=1204 */ function Move( /* VT_BSTR [8] [in] */ $Destination ) { /* Move this file */ } /* DISPID=1100 */ /* VT_PTR [26] */ function OpenAsTextStream( /* ? [29] [in] */ $IOMode, /* ? [29] [in] */ $Format ) { /* Open a file as a TextStream */ } }