Парсинг классов, функций и аргументов в PHP

Я предпочитаю Опцию A

bool a, b, c;

if( a && b && c )
{
   //This is neat & readable
}

, Если у Вас действительно есть особенно долгие условия переменных/метода, Вы можете просто разрыв строки их

if( VeryLongConditionMethod(a) &&
    VeryLongConditionMethod(b) &&
    VeryLongConditionMethod(c))
{
   //This is still readable
}

, Если бы они еще более сложны, тогда я рассмотрел бы выполнение методов условия отдельно вне, если оператор

bool aa = FirstVeryLongConditionMethod(a) && SecondVeryLongConditionMethod(a);
bool bb = FirstVeryLongConditionMethod(b) && SecondVeryLongConditionMethod(b);
bool cc = FirstVeryLongConditionMethod(c) && SecondVeryLongConditionMethod(c);

if( aa && bb && cc)
{
   //This is again neat & readable
   //although you probably need to sanity check your method names ;)
}

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

, например,

if( a )
{
    if( b )
    {
    }
    else
    {
        //Do Something Else B
    }
}
else
{
   //Do Something Else A
}
6
задан durron597 24 July 2015 в 03:00
поделиться

3 ответа

Если вы используете PHP 5, ваш инструмент - Reflection API .

Пример:

$class = new ReflectionClass("NameOfTheClass");
$methods = $class->getMethods();
foreach($methods as $m) {
    print $m->name;
    $m->isPrivate() ? print "Private" : print "";
    $m->isPublic() ? print "Public" : print "";
    $params = $m->getParameters();
    foreach($params as $p) {
        print $p->getName();
        }
}
9
ответ дан 8 December 2019 в 18:39
поделиться

Я предлагаю следующую процедуру:

  1. сохранить текущий вывод get_declared_classes , get_declared_interfaces и get_defined_functions [вы 1139768] (если действительно нуждаются в их поддержке)
  2. включите файл
  3. compare get_declared_classes , get_declared_interfaces и g et_defined_functions с сохраненными вами, чтобы узнать, что нового
  4. использовать отражение для их анализа
  5. перейти к шагу 2 для следующего файла
2
ответ дан 8 December 2019 в 18:39
поделиться

Apple теперь поощряет людей получать шаблоны непосредственно из проекта PyObjC. На Cocoabuilder есть хорошая цепочка объяснений со следующим советом от bbum:

Вам необходимо загрузить и установить шаблоны из PyObjC
репозиторий или веб-сайт.

Шаблоны были извлечены из выпуска, поскольку шаблон
разработка идет в ином темпе и по графику, чем Xcode
выпускает. Слишком часто шаблоны устарели к тому времени
диски были нажаты.

На веб-сайте PyObjC есть как шаблоны для загрузки, так и отличная документация / учебные пособия, чтобы вставать и продолжать.


Изменить: Будучи немного более конкретным, вот что у меня сделано, чтобы PyObjC работал в Snow Leopard:

  • Используя Finder, я перешел к Перейти> Подключиться к серверу ... и подключился к http://svn.red-bean.com/pyobjc/trunk/pyobjc/pyobjc-xcode/ в качестве гостя.

  • Затем я создал папку под названием Xcode в моей локальной системе по адресу ~ Library / Application Support / Developer / Shared / Xcode / . (Возможно, у вас уже есть эта папка, но я еще ничего не настраивал для себя.)

  • Я скопировал папку File Templates с сервера Red-Bean в свою новую папку Xcode. Теперь шаблоны находятся в разделе «Пользовательские шаблоны» Нового проекта ... и Новый файл ... windows.

Проект по умолчанию, созданный "из коробки" (не нужно устанавливать что-либо еще из проекта PyObjC или py2app). Я сколотил глупую программу с одной кнопкой и действием, и она прекрасно работала, включая интеграцию с Interface Builder (я мог управлять перетаскиванием, чтобы связать действия и выходы).

Я также недавно наткнулся на ] серия руководств «Приступая к работе» в блоге, которая показалась весьма полезной для начинающих. Похоже, что автор приложил много усилий к серии "Создание графического интерфейса пользователя какао на Python с помощью PyObjC" (в настоящее время состоит из 6 частей).

и Новый файл ... windows.

Проект по умолчанию, созданный "из коробки" (не нужно устанавливать что-либо еще из проекта PyObjC или py2app). Я сколотил глупую программу с одной кнопкой и действием, и она прекрасно работала, включая интеграцию с Interface Builder (я мог управлять перетаскиванием, чтобы связать действия и выходы).

Я также недавно наткнулся на ] серия руководств «Приступая к работе» в блоге, которая показалась весьма полезной для начинающих. Похоже, что автор приложил много усилий к серии "Создание графического интерфейса пользователя какао на Python с помощью PyObjC" (в настоящее время состоит из 6 частей).

и Новый файл ... windows.

Проект по умолчанию, созданный "из коробки" (не нужно устанавливать что-либо еще из проекта PyObjC или py2app). Я сколотил глупую программу с одной кнопкой и действием, и она прекрасно работала, включая интеграцию с Interface Builder (я мог управлять перетаскиванием, чтобы связать действия и выходы).

Я также недавно наткнулся на ] серия руководств «Приступая к работе» в блоге, которая показалась весьма полезной для начинающих. Похоже, что автор приложил много усилий к серии "Создание графического интерфейса пользователя какао на Python с помощью PyObjC" (в настоящее время состоит из 6 частей).

Я сколотил глупую программу с одной кнопкой и действием, и она прекрасно работала, включая интеграцию с Interface Builder (я мог управлять перетаскиванием, чтобы связать действия и выходы).

Я также недавно наткнулся на ] серия руководств «Приступая к работе» в блоге, которая показалась весьма полезной для начинающих. Автор, кажется, приложил много усилий к серии "Создание графического интерфейса пользователя какао на Python с помощью PyObjC" (в настоящее время состоит из 6 частей).

Я сколотил глупую программу с одной кнопкой и действием, и она прекрасно работала, включая интеграцию с Interface Builder (я мог управлять перетаскиванием, чтобы связать действия и выходы).

Я также недавно наткнулся на ] серия руководств «Приступая к работе» в блоге, которая показалась весьма полезной для начинающих. Автор, кажется, приложил много усилий к серии "Создание графического интерфейса пользователя какао на Python с помощью PyObjC" (в настоящее время состоит из 6 частей).

include dirname(__FILE__) . '/temp-2.php';
$rC = new ReflectionClass('MyFirstClass');

Теперь вы можете узнать, в каком файле он был объявлен и какие методы в нем:

var_dump($rC->getFileName());
var_dump($rC->getMethods());

Что даст вам:

string '/home/squale/developpement/tests/temp/temp-2.php' (length=48)

array
  0 => &
    object(ReflectionMethod)[2]
      public 'name' => string '__construct' (length=11)
      public 'class' => string 'MyFirstClass' (length=12)
  1 => &
    object(ReflectionMethod)[3]
      public 'name' => string 'glop' (length=4)
      public 'class' => string 'MyFirstClass' (length=12)


А теперь, чтобы получить информацию о каждом методе:

foreach ($rC->getMethods() as $rM) {
    var_dump($rM, $rM->getParameters());
    echo '-----';
}

Вы получите :

object(ReflectionMethod)[3]
  public 'name' => string '__construct' (length=11)
  public 'class' => string 'MyFirstClass' (length=12)

array
  0 => &
    object(ReflectionParameter)[4]
      public 'name' => string 'arg1' (length=4)
  1 => &
    object(ReflectionParameter)[5]
      public 'name' => string 'arg2' (length=4)

-----

object(ReflectionMethod)[2]
  public 'name' => string 'glop' (length=4)
  public 'class' => string 'MyFirstClass' (length=12)

array
  0 => &
    object(ReflectionParameter)[5]
      public 'name' => string 'a' (length=1)


Оттуда вы сможете копать еще немного; и придете к тому, о чем вы впервые спросили; -)


В качестве примечания: есть одна вещь, о которой я понятия не имею: « как найти, какие классы / методы объявлены в данном файле »: - (

Если у кого-то есть идея, приветствую!

2
ответ дан 8 December 2019 в 18:39
поделиться
Другие вопросы по тегам:

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