почему не требуется require_once, работая с моими именами путей

Я пишу плагин, и около вершины основного файла плагина у меня есть ряд операторов require_once как это обычно бывает.

После более чем десяти часов попыток выяснить, почему WP не смог найти мои занятия, я, наконец, приземлился на это – если бы у меня было:

 require_once( 'includes/myclassfile.php' ); 

это не удалось. Но если я явно поставлю базовый путь так:

 define ( 'MY_DIR', rtrim( plugin_dir_path( __FILE__ ), '/' ) ); require_once( MY_DIR . '/includes/myclassfile.php' ); 

это сработало.

Поэтому мой вопрос: почему первая форма не работала? Моя IDE (PhpStorm) поняла это, шаблон, который я начал использовать, и у меня установлены другие плагины, которые используют эту форму, и они работают. Что могло быть иначе в этом случае?

Редактировать : этот вопрос получил обозначение как дубликат другого, что также вызвало путаницу в правильном использовании require , однако в этом случае окончательный вывод был противоположным тому, что сработало для меня. Я не спрашиваю, что делать, но почему одна версия потерпит неудачу. Ответ Исаака предполагает причину, но он неудовлетворителен, поскольку в моей установке wordpress есть другие плагины верхнего уровня, которые работают с формой, которая не работает для моего. Я хотел бы знать, что делает меня другим.

(Чтобы быть полным, вот полный файл плагина 🙂

 /* * Plugin Name: A Strenga Projects * Version: 1.0 * Description: Projects for Strenga * Author: DD */ if ( ! defined( 'ABSPATH' ) ) exit; define ( 'STRENGA_PROJECTS_DIR', rtrim( plugin_dir_path( __FILE__ ), '/' ) ); require_once( STRENGA_PROJECTS_DIR . '/includes/plugin.php' ); function myFoofunction() { ladeda(); // defined in plugin.php } myFoofunction(); 

Solutions Collecting From Web of "почему не требуется require_once, работая с моими именами путей"

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

Всегда лучше всего обеспечить полный путь, используя волшебную константу, такую ​​как __FILE__ или __FILE__ , как вы обнаружили.