Итак, у меня есть несколько классов, с которыми я пытаюсь использовать пространства имен PHP, и у меня есть проблемы с доступом к функциям в классе нижнего уровня.
Вот как это сложилось...
Activity → Post
Activity
имеет пространство имен activity
и Post
имеет пространство имен post
В верхней части моего класса Post у меня есть этот код.
namespace Post;
use activity\activity;
Это код, созданный PHPStorm, когда я создал файл класса, а затем расширил класс Activity.
Поэтому, когда я пытаюсь получить доступ к своим публичным функциям внутри Post, я пробовал оба этих метода...
\activity\post::function();
А ТАКЖЕ
$post = new \activity\post();
$post->function();
Но PHPStorm говорит, что ни один из них не существует.
Итак, каков фактический способ доступа к этим функциям более низкого уровня?
Я немного искал Google, но, видимо, я не искал правильных вещей, потому что ничего не нашел о подклассах.
Большое спасибо за вашу помощь в понимании того, как это работает.
Не используйте \activity
, используйте activity
.
\activity
использует пространство имен \
(или base).
Использование не расширяет класс, он создает псевдоним. Поскольку у вас есть Use activity\activity
это делает так, что вы можете получить доступ к функциям в классе activity
, запустив activity::function()
а не используя полное пространство имен \activity\activity::function()
.
Вы также можете определить use \activity\activity as test
и доступа, например test::function()
.
Я не уверен в том, что пространства имен имеют то же имя, что и классы, но sjagr адресован в комментариях.
activity\post::function()
- это правильно?
Post
не выглядит правильным. Ваше имя класса определяет последний термин в ссылке на пространство имен PHP, а пространство имен - это все термины перед ним. Например, вы бы сделалиnamespace AppName;
а затем имяclass Post { ...
, затем обратитесь к нему, используяuse AppName\Post;