2016-12-12 3 views
1

Я пытаюсь создать php и решил сделать очень простую программу только для проверки наследования классов и изучения канатов этого языка.Невозможно найти классы с очень простым проектом

Итак, у меня есть основной класс, который вызывает класс, который реализует интерфейс. Простой, но когда я запускаю его, он говорит мне, что он не может найти классы:

Фатальная ошибка: Class 'PHPSTORM_META \ Shape' не найден в C: \ Users \ Паулу Moreno \ PhpstormProjects \ test \ Square.php on line 12

Дело в том, что именно там находится этот файл. Путь правильный.

Вот основной код:

MainTest.php

<?php 


echo "Hello World"; 
require_once dirname(__DIR__) . '\test\MainTest.php '; 
require_once dirname(__DIR__) . '/test/Square.php '; 
require_once dirname(__DIR__) . '/test/Shape.php '; 
require_once dirname(__DIR__) . '/test/GeoShape.php '; 

echo "Hello World"; 


$rect = new Square(5, 5); 

echo $rect->getArea(); 
echo "<br>" . $rect->getName(); 

Квадрат Класс:

<?php 
/** 
* Created by PhpStorm. 
* User: Paulo Moreno 
* Date: 4-12-2016 
* Time: 15:57 
*/ 

namespace PHPSTORM_META; 


class Square extends Shape implements GeoShape 
{ 
    public $x; 
    public $y; 

    public function __construct($x, $y) 
    {parent::__construct($this->name); 
     $this->x = $x; 
     $this->y = $y; 
    } 

    public function getArea() 
    { 
     return $this->x * $this->y; 
    } 
} 

Это, вероятно, что-то очень простое, что заставит меня хотеть, чтобы разбить головой о стены, но я застрял с этим довольно долгое время. Да, я новичок в php и phpstorm.

+2

Вы включаете квадрат перед формой. Класс квадрат еще не знает, какова форма класса, когда вы пытаетесь наследовать его. – Daan

+0

Это было Даан, спасибо. – pcmoreno

+1

Удалить пространство имен PHPSTORM_META; '- это пространство имен используется только для собственного использования PhpStorm. Я не знаю, откуда вы взяли эту идею/образец кода из (потому что 'PHPSTORM_META' - очень конкретный случай). Сначала попробуйте прочитать руководство по PHP: http://php.net/manual/en/language.namespaces.php – LazyOne

ответ

0

Удалите пробелы после имен файлов:

require_once dirname(__DIR__) . '\test\MainTest.php'; 
require_once dirname(__DIR__) . '/test/Square.php'; 
require_once dirname(__DIR__) . '/test/Shape.php'; 
require_once dirname(__DIR__) . '/test/GeoShape.php'; 

Я также не понимаю, почему вы должны использовать обратную косую черту в одном из имен файлов. Я бы заменил это на forwardslhes.

Кроме того, необходимо включать пространство имен, где вы хотите использовать класс

use PHPSTORM_META; 
+0

Это не сработает ... найдите проблему yoursef. –

+0

Слэши и пространство имен были уже попытками от меня решить проблему. пространство имен использования - это очень удобный отзыв. Проблема заключалась в том, что импорт был таким же, как объяснил Даан в своем комментарии. – pcmoreno

+0

@PauloMoreno ах да, это имеет смысл.Я просто видел пробелы после имен файлов, и когда я тестировал это на своей машине, он не работал, поэтому я хотел указать на это. – JensV

-2

dirname() есть функция требует, чтобы определить path.Your проблемы закрывающей скобки. И __DIR__ - это магические константы для определения текущего каталога файла, поэтому попробуйте под кодом.

require_once __DIR__.'/test/MainTest.php'; 
require_once __DIR__.'/test/Square.php'; 
require_once __DIR__.'/test/Shape.php'; 
require_once __DIR__.'/test/GeoShape.php'; 
+1

На самом деле достаточно написать 'require_once __DIR __. '/ Test/Square.php';' ... Ваш код бессмыслен, так как он будет пытаться 'require_once' весь каталог - потому что это то, что' dirname() ' возвращается. –

Смежные вопросы