Mais aussi des outils…
Cf. « Why developers hate PHP » par Mehdi Zedi
Vous aimez apprendre des choses à la mode ?
vous allez voir des choses modernes, si si (objet)
Vous allez devoir bosser (de plus en plus) sur des vieux trucs : importance de la maintenance vs innovation (ou innovation dans la maintenance) : ODD ?
S’appuyer sur un cadriciel (framework) moderne comme Symfony
« SensioLabs, une des plus belles réussites françaises du web » –
In #HistoiresdeFrance, chapitre 21 (post X du Gouvernement Français, décembre 2016 - cf. sauvegarde sur/ Internet Archive)
<html>
<head>
<title>Test PHP</title>
</head>
<body>
<?php echo '<p>Bonjour le monde</p>'; ?>
</body>
</html>
ou bien :
<?php
$html = "<html><head><title>Test PHP</title></head><body>";
$html .= "<p>Bonjour le monde</p>";
$html .= "</body></html>";
print($html);
Vous allez commencer à l’apprendre en hors-présentiel, cette semaine
Vous devriez comprendre ce que je vais montrer
$io = new SymfonyStyle($input, $output);
$io->title('list of todos:');
class MyCommand
{
private $todoRepository;
public function __construct($repository)
{
$this->todoRepository = $repository;
}
protected function execute()
{
$todos = $this->todoRepository->findAll();
}
protected function execute(SymfonyStyle $io): int
{
$todos = $this->todoRepository->findAll();
if( empty($todos) ) {
return Command::FAILURE;
}
else {
$io->title('list of todos:');
$io->listing($todos);
}
return Command::SUCCESS;
}
use Symfony\Component\Console\Command\Command;
class ListTodosCommand extends Command
{
public function __construct($repository)
{
$this->todoRepository = $repository;
parent::__construct();
}
namespace App\Command;
use Symfony\Component\Console\Command\Command;
use App\Entity\Todo;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
class MyCommand extends Command
{
// ...
public function __construct(ManagerRegistry $manager)
{
$this->todoRepository = $manager->getRepository(Todo::class);
parent::__construct();
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
// ...
return Command::SUCCESS;
}
/**
* Classe "Circuit" du Modèle
*/
class Circuit
{
...
/**
* Set description
*
* @param string $description
*
* @return Circuit
*/
public function setDescription($description)
{
...
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
#[AsCommand(
name: 'app:list-todos',
description: 'List tasks',
)]
class ListTodosCommand extends Command
{
Nous installerons/utiliserons la variante CLI (Command Line Interface)
Interpréteur ligne de commande (php-cli
)
$ php helloworld.php
php
)php-sqlite3
php-intl
php-xml
Logiciels faisant partie de l’écosystème de bibliothèques, composants, frameworks PHP.
Sources :
Gestionnaire de paquetages PHP.
Il fournit :
composer.json
Exemple de description d’un projet local :
{ "type": "project", "require": { "php": ">=8.1", "symfony/console": "^6.4", "symfony/flex": "^1.0", "symfony/framework-bundle": "^6.4" }, "require-dev": { "symfony/dotenv": "^6.4" }, "config": { "preferred-install": { "*": "dist" }, "sort-packages": true }, "autoload": { "psr-4": { "App\\": "src/" } } }
Le développeur lance :
$ composer install
composer.json
Résultat est téléchargé dans vendor/
autoload.php autoload_runtime.php bin/ composer/ doctrine/ easycorp/ friendsofphp/ laminas/ masterminds/ monolog/ nikic/ psr/ symfony/ twig/
Afficher des traces d’exécution
print()
est votre ami ?dump()
dans Symfony
Utiliser dump()
dump($myarray);
PHPUnit
Ne sera pas utilisé dans le cours (faute de temps)
dump()