Исследуйте COM-объект в PHP

Короче говоря, это означает, что нет никаких ограничений на использование объекта. Это совпадает с любым другим объектом.

объект первого класса А является объектом, который может быть динамично создан, уничтожен, передан функции, возвратился как значение, и имейте все права, как другие переменные на языке программирования имеют.

В зависимости от языка, это может подразумевать:

  • являющийся выразимым как анонимное литеральное значение
  • , являющееся 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 они действительно стремятся делать все первым классом. Я верю намерению человека, который сделал предназначенный первый класс Вашего оператора.

5
задан shaiss 26 October 2009 в 16:23
поделиться

2 ответа

Странно, что 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));
?>

Надеюсь, это поможет.

0
ответ дан 14 December 2019 в 08:54
поделиться

Вы можете использовать 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 */
 }
}
7
ответ дан 14 December 2019 в 08:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: