donc dans ma page principale j'ai un tableaux associatif qui se nomme $listeLivres qui contient tous les informations des livres.
mon but premier est de créer un objet(array) de la Class Livre. ensuite je fais un Foreach pour vérifier si il y a des erreurs.
tout ça va très bien, la ou cella coince c'est que je dois envoyer les oLivres dans l'objet oBibliothèque qui est de la classe Bibliothèque.
voici un exemple de ce que j'aimerais sa soit.
Code : Tout sélectionner
Array
(
[0] => Bibliotheque Object
(
[bibliotheque:Bibliotheque:private] => Array
(
[1] => Livre Object
(
[annee:Livre:private] => 2009
[auteur:Livre:private] => Marie Ndiaye
[titre:Livre:private] => Trois Femmes Puissantes
[erreurs:Livre:private] => Array
)
[4] => Livre Object
(
[annee:Livre:private] => 2010
[auteur:Livre:private] => Michel Houellebecq
[titre:Livre:private] => La Carte Et Le Territoire
[erreurs:Livre:private] => Array
(
)
)
)
Je suis pas loin de trouver la solution mais beaucoup de difficulté c'est ma troisième journée avec le POO.
Voici mon code de ma page principale.
Code : Tout sélectionner
<?php
// Suggestion :
// 1- Créer un objet bibliothèque
// 2- Balayer ce tableau de livres et pour chaque occurrence
// - créer un objet Livre
// - s'il n'a aucune erreur l'ajouter à la bibliothèque
// - sinon le détruire
// 3- Exécuter le getter de la propriété livres de l'objet bibliothèque
// 4- Exécuter les méthodes de recherche sur l'objet bibliothèque
// 5- Supprimer des livres de la bibliothèque
// 6- Exécuter le getter de la propriété livres de l'objet bibliothèque
require_once 'classes/Livre.php'; // Chargement de la classe Livre
require_once 'classes/Bibliotheque.php'; // Chargement de la classe Bibliotheque
$listeLivres = array(
array(
"annee" => 2009,
"auteur" => "Marie NDiaye",
"titre" => "Trois femmes puissantes"
),
array(
"annee" => 2010,
"auteur" => "Michel Houellebecq",
"titre" => "La Carte et le Territoire"
),
// doublon du précédent
array(
"annee" => 2010,
"auteur" => "Michel Houellebecq",
"titre" => "La Carte et le Territoire"
),
// année incorrecte
array(
"annee" => 'aaaa',
"auteur" => "Michel Houellebecq",
"titre" => "La Carte et le Territoire"
),
array(
"annee" => 2011,
"auteur" => "Alexis Jenni",
"titre" => "L'Art français de la guerre"
),
array(
"annee" => 2012,
"auteur" => "Jérôme Ferrari",
"titre" => "Le Sermon sur la chute de Rome"
),
array(
"annee" => 2013,
"auteur" => "Pierre Lemaitre",
"titre" => "Au revoir là-haut"
),
array(
"annee" => 2014,
"auteur" => "Lydie Salvayre",
"titre" => "Pas pleurer"
),
array(
"annee" => 2015,
"auteur" => "Mathias Énard",
"titre" => "Boussole"
),
array(
"annee" => 2016,
"auteur" => "Leïla Slimani",
"titre" => "Chanson douce"
),
array(
"annee" => 2016,
"auteur" => "Gaël Faye",
"titre" => "Petit pays"
),
array(
"annee" => 2017,
"auteur" => "Éric Vuillard",
"titre" => "L'Ordre du jour"
),
array(
"annee" => 2018,
"auteur" => "Nicolas Mathieu",
"titre" => "Leurs enfants après eux"
),
array(
"annee" => 2019,
"auteur" => "Jean-Paul Dubois",
"titre" => "Tous les hommes n'habitent pas le monde de la même façon"
)
);
$oBibliotheques = [];
$oLivres = [];
$i = 0; // indice de remplissage du tableau $oLivres d'objets de la classe Livre
$j = 0; // indice de balayage du tableau $listeLivres
foreach ($listeLivres as $livre) {
$oLivres[$i] = new Livre($livre['annee'], $livre['auteur'], $livre['titre']);
$oBibliotheques[] = new Bibliotheque(['bibliotheque']);
echo "Traitement du livre d'indice " . $j . " du tableau listeLivres<br>";
// pour tester les erreurs avec la méthode getErreurs()
if (count($oLivres[$i]->getErreurs($livre['annee'], $livre['auteur'], $livre['titre'])) !== 0) {
echo "<br>Comporte des erreurs <pre>" . print_r($oLivres[$i], true) . "</pre>";
unset($oLivres[$i]); // destruction explicite de l'objet
} else {
$oBibliotheques[] = array_push($oBibliotheques, $oLivres[$i]);
$oLivres[$i]->afficherLivre();
$i++;
}
$j++;
}
echo "<br> test test test test <pre>" . print_r($oBibliotheques, true) . "</pre>";
echo "<br> Objets livre du tableau oLivres (sans erreurs) <pre>" . print_r($oLivres, true) . "</pre>";
Ma classe livre
Code : Tout sélectionner
<?php
/**
* Classe de l'entité Personne
*
*/
class Livre
{
private $annee; // 'AAAA'
private $auteur;
private $titre;
private $erreurs = array();
/**
* Constructeur de la classe
*
*/
public function __construct($annee = null, $auteur = null, $titre = null)
{
$this->setAnnee($annee);
$this->setAuteur($auteur);
$this->setTitre($titre);
}
/**
* Destructeur de la classe
*
*/
public function __destruct()
{
echo "Le livre $this->titre $this->auteur n'existe plus!<br><br>";
}
/**
* Accesseur de la propriété Auteur
*
* @return string
*/
public function getAuteur()
{
return $this->auteur;
}
/**
* Accesseur de la propriété titre
*
* @return string
*/
public function getTitre()
{
return $this->titre;
}
/**
* Accesseur de la propriété Annee
*
* @return formatted date 'AAAA'
*/
public function getAnnee()
{
return $this->annee;
}
/**
* Accesseur de la propriété erreurs
*
* @return array
*/
public function getErreurs()
{
return $this->erreurs;
}
/**
* Mutateur de la propriété Auteur
*
* @return boolean
*/
public function setAuteur($auteur = null)
{
unset($this->erreurs['auteur']);
$auteur = trim($auteur);
$regExp = '/^[a-zàâçéèêëîïôûùüÿñæœÉ .-]*$/i'; // contrôle au moins 2 caractères alphabétiques
if ($auteur !== null && preg_match($regExp, $auteur)) {
$this->auteur = ucwords(strtolower($auteur));
} else {
$this->erreurs['auteur'] = true;
}
return $this;
}
/**
* Mutateur de la propriété titre
*
* @return boolean
*/
public function setTitre($titre = null)
{
unset($this->erreurs['titre']);
$titre = trim($titre);
$regExp = '/^[a-zàâçéèêëîïôûùüÿñæœ \'.-]*$/i'; // contrôle au moins 2 caractères alphabétiques
if ($titre !== null && preg_match($regExp, $titre)) {
$this->titre = ucwords(strtolower($titre));
} else {
$this->erreurs['titre'] = true;
}
return $this;
}
/**
* Mutateur de la propriété annee
*
* @return boolean
*/
public function setAnnee($annee = null)
{
unset($this->erreurs['annee']);
$annee = trim($annee);
if ($annee !== null && preg_match('/^\d{4}$/', $annee)) {
$this->annee = $annee;
} else {
$this->erreurs['annee'] = true;
}
return $this;
}
/**
* Affichage direct des propriétés de la livre
*
*/
public function afficherLivre()
{
if (isset($this->auteur) && isset($this->titre) && isset($this->annee)) {
echo "Le livre $this->titre $this->auteur est née le $this->annee.<br><br>";
} else {
echo "Ce livre n'a pas toutes ses propriétés.<br>";
}
}
}
Code : Tout sélectionner
<?php
// require_once 'classes/Livre.php'; // Chargement de la classe Livre
/**
* Classe de l'entité Personne
*
*/
class Bibliotheque
{
private $bibliotheque = array();
/**
* Accesseur de la propriété livres
*
* @return string
*/
public function getLivres()
{
return $this->bibliotheque;
}
// /**
// * Destructeur de la classe
// * SupprimerLivre
// */
// public function __destruct()
// {
// echo "Le livre $this->titre $this->auteur n'existe plus!<br><br>";
// }
/**
* function ajouter livre dans un tableau
*
*/
public function ajouterLivre($oLivre)
{
array_push($bibliotheque, $oLivre);
}
/**
* function rechercher annee de publication
*
*/
public function rechercherAnne($trouveAnne)
{
if (isset($this->auteur) && isset($this->titre) && isset($this->annee)) {
echo "Le livre $this->titre $this->auteur est née le $this->annee.<br><br>";
} else {
echo "Ce livre n'a pas toutes ses propriétés.<br>";
}
}
/**
* function rechercher titre de publication
*
*/
public function rechercherTitre($trouveTitre)
{
if (isset($this->auteur) && isset($this->titre) && isset($this->annee)) {
echo "Le livre $this->titre $this->auteur est née le $this->annee.<br><br>";
} else {
echo "Ce livre n'a pas toutes ses propriétés.<br>";
}
}
}