# Review the Prefixed PHP Project
The results of the prefixing process of the project can be found in this repository: https://github.com/PHP-Prefixer/Getting-Started_prefixed (opens new window)
# The New Composer.json of the Prefixed Project
The PHP-Prefixed process has produced a new composer.json
schema, contains all the original files and files that are re-organized according to the applied PPP
prefix.
{
"name": "php-prefixer/getting-started",
"autoload": {
"classmap": [
"src/ASimpleLogWarning.php",
"vendor_prefixed/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php",
"vendor_prefixed/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php",
"vendor_prefixed/monolog/monolog/src/Monolog/Formatter/LineFormatter.php",
"vendor_prefixed/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php",
"vendor_prefixed/monolog/monolog/src/Monolog/Handler/AbstractHandler.php",
"vendor_prefixed/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php",
"vendor_prefixed/monolog/monolog/src/Monolog/Handler/BufferHandler.php",
"vendor_prefixed/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php",
"vendor_prefixed/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php",
"vendor_prefixed/monolog/monolog/src/Monolog/Handler/GroupHandler.php",
"vendor_prefixed/monolog/monolog/src/Monolog/Handler/HandlerInterface.php",
"vendor_prefixed/monolog/monolog/src/Monolog/Handler/MailHandler.php",
"vendor_prefixed/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php",
"vendor_prefixed/monolog/monolog/src/Monolog/Handler/NullHandler.php",
"vendor_prefixed/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php",
"vendor_prefixed/monolog/monolog/src/Monolog/Handler/StreamHandler.php",
"vendor_prefixed/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.php",
"vendor_prefixed/monolog/monolog/src/Monolog/Handler/SyslogHandler.php",
"vendor_prefixed/monolog/monolog/src/Monolog/Handler/TestHandler.php",
"vendor_prefixed/monolog/monolog/src/Monolog/Logger.php",
"vendor_prefixed/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php",
"vendor_prefixed/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php",
"vendor_prefixed/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php",
"vendor_prefixed/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php",
"vendor_prefixed/monolog/monolog/src/Monolog/Processor/WebProcessor.php"
],
"files": []
}
}
The files of the Monolog library are stored in the vendor_prefixed
folder. The composer.json
declares them in the classmap
attribute to generate the autoloader.
# The Prefixed Test
The project test file a-simple-test.php
is mostly unchanged. The prefixer added a notice that it was processed:
<?php /* This file has been prefixed by <PHP-Prefixer> for "PHP-Prefixer Getting Started" */
# File: a-simple-test.php
use Acme\ASimpleLogWarning;
require __DIR__ . '/vendor/autoload.php';
$aSimpleLogWarning = new ASimpleLogWarning();
$aSimpleLogWarning->logWarn();
# The Prefixed Class
This is the class ASimpleLogWarning
that uses the Monolog/Logger src/ASimpleLogWarning.php
. Now it is prefixed like this:
<?php
/* This file has been prefixed by <PHP-Prefixer> for "PHP-Prefixer Getting Started" */
# File: src/ASimpleLogWarning.php
namespace Acme;
class ASimpleLogWarning
{
public function logWarn()
{
$log = new \PPP\Monolog\Logger('name');
$log->pushHandler(new \PPP\Monolog\Handler\StreamHandler('app.log', \PPP\Monolog\Logger::WARNING));
$log->addWarning('Foo');
}
}
The original \Monolog\Logger
has been replaced with \PPP\Monolog\Logger
; the rest of the references in the same file and all the declarations in the vendor_prefixed/monolog/monolog
library folder have also been replaced.
When the test file is executed: php a-simple-test.php
, it adds a new line to the log file app.log
with the following sample output:
[2020-10-08 17:40:19] name.WARNING: Foo [] []
[2020-10-08 18:14:43] name.WARNING: Foo [] []
# Testing the Prefixed Monolog
Since the Monolog
library has been fully prefixed, the original unit tests can be executed inside the vendor_prefixed
folder to confirm that the library is correctly prefixed and is functionally equivalent to the original library.
~/vendor_prefixed/monolog/monolog$ phpunit
PHPUnit 5.7.27 by Sebastian Bergmann and contributors.
................................................................. 65 / 97 ( 67%)
................................ 97 / 97 (100%)
Time: 116 ms, Memory: 6.00MB
A few advanced notes for future testers:
Monolog
v1 uses a custom autoloader in the unit tests. It was manually fixed to load from the right directory. For instance:vendor_prefixed/monolog/monolog/tests/Monolog/Functional/Handler/FirePHPHandlerTest.php
.- There is a test that checks the namespace of the loaded object. It has been updated to check the namespace prefixed with
PPP
. This is the modified test functionvendor_prefixed/monolog/monolog/tests/Monolog/Formatter/LineFormatterTest.php / testDefFormatWithObject
.
# Conclusion
In this guide, a simple project that uses Monolog (opens new window) Logger
has been presented to show how the prefixer can be used. The original project writes a line in a log file, the same functionality is retained after the prefixing process, and the Monolog
unit tests are passed.
Please, continue to the next guide to learn more about advanced cases.