PHP Как получить библиотеку, к которой принадлежит функция? [Дубликат]

ОПРЕДЕЛЕНИЯ

(число внутри скобки () - это «ссылка» на код, который написан ниже)

prototype - объект, который состоит из: => функции (3) этого конкретного ConstructorFunction.prototype (5), которые доступны каждому объекту (4), созданному или создаваемому через эту конструкторскую функцию (1) => сама конструкторская функция (1) => __proto__ этого объекта (объект-прототип)

__proto__ (dandor proto?) - ссылка МЕЖДУ любым объектом (2), созданным через конкретную конструкторскую функцию (1), и свойства объекта прототипа (5) этого конструктора THAT позволяет каждому созданному объекту (2) иметь доступ к функциям и методам прототипа (4) (__proto__ по умолчанию включен в каждый отдельный объект в JS)

КОДИРОВАНИЕ КОДА

1.

    function Person (name, age) {
        this.name = name;
        this.age = age;  

    } 

2.

    var John = new Person(‘John’, 37);
    // John is an object

3.

    Person.prototype.getOlder = function() {
        this.age++;
    }
    // getOlder is a key that has a value of the function

4.

    John.getOlder();

5.

    Person.prototype;
85
задан NikiC 15 March 2012 в 16:15
поделиться

8 ответов

Вы также можете сделать это в самом PHP:

$reflFunc = new ReflectionFunction('function_name');
print $reflFunc->getFileName() . ':' . $reflFunc->getStartLine();
182
ответ дан Tom Haigh 22 August 2018 в 06:27
поделиться
  • 1
    +1 для решения этого с помощью PHP вместо IDE. Хорошая идея. – Gordon 8 February 2010 в 16:23
  • 2
    Совет: $reflFunc->isInternal() === TRUE означает - & gt; getFileName () и - & gt; getStartLine () вернет FALSE. – Bob Stein 5 July 2013 в 18:11
  • 3
    @EHerman Я не думаю, что вы можете найти вызывающих функции с отражением. Если бы вы могли, возможно, это не сработало бы для этого, потому что файлы PHP, как правило, включаются по требованию, и поэтому у вас, вероятно, не будет весь загруженный код, который вызывает функцию. – Tom Haigh 8 May 2014 в 17:22
  • 4
    Для методов класса вы можете использовать $reflFunc = new ReflectionMethod($this, 'method_name'); – Ladislav Gallay 24 August 2014 в 10:12
  • 5
    @EHerman вы можете заглянуть в debug_backtrace () для поиска, где вызывается функция. – dotVezz 5 September 2014 в 19:01

Я предполагаю, что под «описанием» вы подразумеваете «определенный». Для этого вам в идеале нужна достойная IDE, которая может это сделать.

1
ответ дан Anton Gogolev 22 August 2018 в 06:27
поделиться
  • 1
    Я использую Aptana, у которого есть текстовый поиск по проекту. Но для его использования мне нужно импортировать отверстие (очень большой) сайт в качестве проекта. – SaltLake 8 February 2010 в 15:26

Либо используйте среду IDE, которая позволяет это сделать (я бы рекомендовал Eclipse PDT), либо вы можете grep ее, если в Linux, или с помощью wingrep. В Linux это будет что-то вроде:

grep -R "function funName" *

из корневой папки проекта.

11
ответ дан Johnco 22 August 2018 в 06:27
поделиться

Мне нравится решение Тома, поэтому я подумал, что могу поделиться еще несколькими трюками с ReflectionFunction (он должен работать на каждом PHP 5):

  • однострочный для печати имени файла:
    print (new ReflectionFunction("foo"))->getFileName();
    

Обратите внимание, что он не покажет вам местоположение функций internal (таких как _ ]), но он по-прежнему может печатать API для него, как показано ниже.

  • для печати определения и параметров функции:
    print new ReflectionFunction("foo");
    
    Пример:
    $ php -r 'print new ReflectionFunction("_");'
    Function [ <internal:gettext> function _ ] {
      - Parameters [1] {
        Parameter #0 [ <required> $msgid ]
      }
    }
    
1
ответ дан kenorb 22 August 2018 в 06:27
поделиться

Heres - основная функция, которая будет проверять ваши файлы всего проекта за определенную строку и сообщать вам, в каком файле она находится, и какую позицию char она начинается с использования только базового php. Надеюсь, это поможет кому-то ...

<?php 
$find="somefunction()";

echo findString('./ProjectFolderOrPath/',$find);

function findString($path,$find){
    $return='';
    ob_start();
    if ($handle = opendir($path)) {
        while (false !== ($file = readdir($handle))) {
            if ($file != "." && $file != "..") {
                if(is_dir($path.'/'.$file)){
                    $sub=findString($path.'/'.$file,$find);
                    if(isset($sub)){
                        echo $sub.PHP_EOL;
                    }
                }else{
                    $ext=substr(strtolower($file),-3);
                    if($ext=='php'){
                        $filesource=file_get_contents($path.'/'.$file);
                        $pos = strpos($filesource, $find);
                        if ($pos === false) {
                            continue;
                        } else {
                            echo "The string '$find' was found in the file '$path/$file and exists at position $pos<br />";
                        }
                    }else{
                        continue;
                    }
                }
            }
        }
        closedir($handle);
    }
    $return = ob_get_contents();
    ob_end_clean();
    return $return;
}
?>
2
ответ дан Lawrence Cherone 22 August 2018 в 06:27
поделиться

Если вы используете IDE, например Netbeans, вы можете CTRL + щелкнуть по использованию функции, и он перенесет вас туда, где он определен, если файл находится в папке проекта, которую вы определили.

Нет кода или функции для этого.

3
ответ дан Stephen Melrose 22 August 2018 в 06:27
поделиться
  • 1
    То же самое в Zend Studio, и я предполагаю, что это также будет работать с PDT для Eclipse. – Gordon 8 February 2010 в 16:22
  • 2
    @Gordon & quot; IDE, например & quot; Я думаю, что это необходимо для любой современной среды IDE ... – feeela 15 March 2012 в 16:20
  • 3
    Но есть код для этого – Timo Huovinen 1 August 2013 в 12:31

Вам понадобится среда IDE, которая поддерживает функциональность «Open Function Declaration». Для php полезно использовать Eclipse PDT.

Чтобы найти определение функции, выделите имя функции, нажмите CTRL + Нажмите на имя.

-1
ответ дан Yada 22 August 2018 в 06:27
поделиться

еще один способ проверить, где определена функция, попытаться переопределить функцию, система ошибок PHP просто вернет ошибку, сообщив вам, где ранее определенная функция

2
ответ дан Yohanip 22 August 2018 в 06:27
поделиться
Другие вопросы по тегам:

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