<?php
class Hoge
{
public function talk(){
print "おいらHogeクラスです";
}
}
こいつには、namespaceの宣言がないことに注意してください。
Monkey.phpにtalkToHogeというメソッドを追加します。
<?php
namespace MonkeyWorld;
class Monkey
{
public function scream(){
echo "ウキー!!!";
}
public function talkToChimpanzee(){
Chimpanzee::talk();
}
public function talkToHoge(){
Hoge::talk();
}
}
MonkeyTest.phpに次のテストメソッドを足します。
public function testTalkToHoge()
{
$monkey = new Monkey();
ob_start();
$monkey->talkToHoge();
$actual = ob_get_clean();
$expected = 'おいらHogeクラスです';
$this->assertEquals($expected, $actual);
}
MonkeyTestクラスを実行します。
Error : Class 'MonkeyWorld\Hoge' not found D:\xampp\htdocs\autoloadSample\class\Monkey.php:16 D:\xampp\htdocs\autoloadSample\tests\MonkeyTest.php:38
<?php
use PHPUnit\Framework\TestCase;
require_once "class/Monkey.php"; //書き換え
class MonkeyTest extends TestCase
{
public function testScream()
{
$monkey = new Monkey();
ob_start();
$monkey->scream();
$actual = ob_get_clean();
$expected = 'ウキー!!!';
$this->assertEquals($expected, $actual);
}
}
Shift + F10で実行します。
Testing started at 12:37 … D:\xampp\php\php.exe D:\xampp\php\phpunit.phar --configuration D:\xampp\htdocs\autoloadSample\phpunit.xml --filter "/(MonkeyTest::testScream)( .*)?$/" --test-suffix MonkeyTest.php D:\xampp\htdocs\autoloadSample\tests --teamcity PHPUnit 8.5.8 by Sebastian Bergmann and contributors. Error : Class 'Monkey' not found D:\xampp\htdocs\autoloadSample\tests\MonkeyTest.php:12 Time: 98 ms, Memory: 12.00 MB ERRORS! Tests: 1, Assertions: 0, Errors: 1. Process finished with exit code 2
エラーですね…。
「結局、Class ‘Monkey’ not found って出ますけど!なんなんですか!!!」
まぁまぁ、まだあわてるような時間じゃないって冒頭に言いましたね。( ˊᵕˋ )
テスト元のファイル、Monkey.phpをよく見てみると
<?php
namespace MonkeyWorld;
class Monkey
{
public function scream(){
echo "ウキー!!!";
}
}
<?php
use MonkeyWorld\Monkey;
echo "ほげだよ<br>";
$monkey = new Monkey();
$monkey->scream();
Monkeyクラスを次のようにします。
<?php
namespace MonkeyWorld;
class Monkey
{
public function scream(){
echo "ウキー!!!";
}
}
上記のコードでは、namespaceを追加したんですね。
これでhoge.phpからMonkeyクラスが読み込めそうじゃないですか。
しかし、結果は
( ! ) Fatal error: Uncaught Error: Class ‘MonkeyWorld\Monkey’ not found in D:\xampp\htdocs\autoloadSample\hoge.php on line 7
( ! ) Error: Class ‘MonkeyWorld\Monkey’ not found in D:\xampp\htdocs\autoloadSample\hoge.php on line 7
となってしまいます。(>_<)
私、これautoloadのつまづきポイントだと思うんですけどね。
そりゃ、autoload.phpを読み込んでないんですもんね。なんの恩恵もないわけですよ。
<?php
require_once "vendor/autoload.php";
use MonkeyWorld\Monkey;
echo "ほげだよ<br>";
$monkey = new Monkey();
$monkey->scream();
上記のファイルでは
require_once "vendor/autoload.php";
が追加になっています。
ブラウザから実行すると、次のように表示され、うまくいきました!
次に例えば、Chimpanzeeクラスを追加します。
<?php
namespace MonkeyWorld;
class Chimpanzee
{
public function scream(){
echo "おいらチンパンジー。";
}
}
これも、次のようにやるとちゃんと表示されます。
<?php
require_once "vendor/autoload.php";
use MonkeyWorld\Monkey;
use MonkeyWorld\Chimpanzee;
echo "ほげだよ<br>";
$monkey = new Monkey();
$monkey->scream();
$chimpan = new Chimpanzee();
$chimpan->scream();