2016-12-12 5 views
1

私はPHPを試しています。クラスの継承をテストし、この言語のロープを学ぶだけの非常に単純なプログラムを作ることにしました。非常に簡単なプロジェクトでクラスを見つけることができません

私はインターフェイスを実装するクラスを呼び出すメインクラスを持っています。 シンプル、しかし、私はそれを実行したとき、彼は彼がクラスを見つけることができない私に語った:

致命的なエラー:クラスCには見られない「PHPSTORM_METAの\形状」:パウロ モレノ\ \ Users \ユーザー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'; 

また、私は本当に理解していません。私はそれを前方スラッシュに置き換えようとしています。

また、あなたが

use PHPSTORM_META; 
+0

それは動作しません... yoursef問題を見つける。 –

+0

スラッシュと名前空間はすでに問題を解決しようとしています。 ところで、使用する名前空間はとても便利です。 Daanが彼のコメントで説明したように、問題は輸入の順序だった。 – 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() '戻る。 –

関連する問題