Page 1 sur 2
Des class lié entre elle.
Posté : 07 nov. 2013, 19:41
par Allatric
Bonjours, j'ai une petite question.
J'ai une class que j'ai appelé header ou je mets les fonctions importantes et j'ai d'autre class lié a cette class header(extends).
En gros c'est une sorte d'ensemble de fichier de code près a l'emploi pour faire plein de chose comme gérer les dates, les fichiers, la pagination, pour crypté...
Je défini une variable: $this->path_root_local et $this->path_root_web dans ma class header et j'aimerais pouvoir l'utiliser dans ma class date.
Comment je peux faire ça ? Je pensais que la classe secondaire étant lié a la principal pouvait récupérer ces variables...
Re: Des class lié entre elle.
Posté : 07 nov. 2013, 20:01
par yann18
il te faut créer un objet à partir de la classe header. A partir de cet objet , tu peux invoquer une méthode ou un attribut(à condition que de ce dernier ait pour modificateur public) de la classe header. invoquer l'attribut(dans ton cas) d'une classe, à l’extérieur de celle çi, est tout à fait déconseillé mais cela reste possible.
Re: Des class lié entre elle.
Posté : 07 nov. 2013, 20:05
par Allatric
Les deux class sont lier entre elle, je peux donc logiquement utilisé mes variables dans mon autre class simplement comme si c'était une seule et unique class suivant comment elles sont protégé ?
Je débute un peut avec les class...
Re: Des class lié entre elle.
Posté : 07 nov. 2013, 20:30
par yann18
Les deux class sont lier entre elle, je peux donc logiquement utilisé mes variables dans mon autre class simplement comme si c'était une seule et unique class suivant comment elles sont protégé ?
Je débute un peut avec les class...
le seuls cas où l'on peut, dans une classe A, utilisé directement les attributs ou les méthodes d'une autre classe B c'est quand il y a héritage.Dans tous les autres cas il faut passer par l'instanciation (sauf cas des méthodes ou variables static).
Re: Des class lié entre elle.
Posté : 07 nov. 2013, 20:43
par Allatric
Ce que je comprends pas, c'est que la ça a l'air de marché dans cet exemple:
<?php
class header
{
function header()
{
$this->path_root_local = '/var/www/admins/dev/documents/class/';
}
}
// ---------- ----------
class date_extends extends header
{
function test()
{
return $this->path_root_local;
}
}
$date_extends = new date_extends();
echo $date_extends->test();
?>
Mais dans mon code, j'ai cette erreur: Fatal error: Using $this when not in object context in /var/www/admins/dev/documents/class/class_menu_extends.php on line 10
Re: Des class lié entre elle.
Posté : 07 nov. 2013, 21:13
par xTG
Tu utilises $this alors que tu n'es pas dans un objet instancié.
Montres nous ton code.
Re: Des class lié entre elle.
Posté : 07 nov. 2013, 21:47
par AB
Ton code doit donc être construit différemment de cet exemple...
Re: Des class lié entre elle.
Posté : 07 nov. 2013, 22:19
par Allatric
J'ai trouvé, j'avais déclaré ma fonction comme ça: public static function et en enlevant le mot static plus aucun problème.
Je débute un peut avec cette facon de codé, ça sert a quoi de mettre la fonction en static ?
Re: Des class lié entre elle.
Posté : 07 nov. 2013, 22:27
par xTG
Cela défini une fonction de class et non d'instance.
Une fonction de class est accessible même sans instance, mais surtout elle est partagée entre toutes les instances.
C'est déjà plus flagrant avec une variable, car si une instance la modifie alors sa nouvelle valeur est accessible par toutes les instances de la class.
Re: Des class lié entre elle.
Posté : 07 nov. 2013, 22:32
par moogli
sans parler du fait que la poo à la php4 style c'est pas top
il faut appeler le constructeur du parent implicitement =>
http://www.php.net/manual/fr/language.oop5.decon.php
tu as aussi "oublié" de créer la propriété path_root_local dans la classe mère
on parle de méthode et pas de fonction
@+
Re: Des class lié entre elle.
Posté : 07 nov. 2013, 22:42
par Allatric
sans parler du fait que la poo à la php4 style c'est pas top
il faut appeler le constructeur du parent implicitement =>
http://www.php.net/manual/fr/language.oop5.decon.php
tu as aussi "oublié" de créer la propriété path_root_local dans la classe mère
on parle de méthode et pas de fonction
@+
Tu peux être plus clair ? Je suis pas sur d'avoir comprit.
Re: Des class lié entre elle.
Posté : 07 nov. 2013, 23:01
par moogli
en php4 une méthode avec le même nom que la classe est considéré comme constructeur.
donc la méthode header() est le constructeur de la classe header.
Cette façon de faire n'est plus à prendre en compte depuis php5 (plus de 10 ans

).
par exemple ton code devient
<?php
class header {
protected $path_root_local;
function __construct() {
$this->path_root_local = '/var/www/admins/dev/documents/class/';
}
}
class date_extends extends header {
function __construct() {
parent::__construct();
}
function test() {
return $this->path_root_local;
}
}
$date_extends = new date_extends();
echo $date_extends->test();
@+
Re: Des class lié entre elle.
Posté : 10 nov. 2013, 16:24
par Allatric
Donc depuis 10ans on doit utilisé ta technique ? Par que ce moi j'ai fait comme dans les tuto^^.
Est ce que je peux utilisé des variables d'une autre class: si par exemple j'ai une class 1 et une class 1.1 et 1.2 extends de 1.
Une variable de la class 1.1 pourra être utilisé dans la class 1.2 ? Ou ça sera seulement de la 1 vers 1.1 et 1.2 ?
-----
Sinon, j'aimerais savoir si la génération de CSS dynamique est une bonne idée ? En gros je passe en paramètre des variables qui modifie mon fichier php qui contient le css qui grace a l'URL Rewrite est renommé en css^^, ce qui donne:
<!-- CSS personnalisé -->
<!-- Le CSS `erreur` est inconnue -->
<link rel="stylesheet" href="http://domaine.fr/admins/dev/documents/class/css/style_pagination.css?aleatoire=haut&fontsize=15&unit=px" type="text/css" media="screen"/>
<link rel="stylesheet" href="http://domaine.fr/admins/dev/documents/class/css/style_pagination.css?aleatoire=milieux&fontsize=30&unit=px" type="text/css" media="screen"/>
<link rel="stylesheet" href="http://domaine.fr/admins/dev/documents/class/css/style_pagination.css?aleatoire=bas&fontsize=50&unit=px" type="text/css" media="screen"/>
<link rel="stylesheet" href="http://domaine.fr/admins/dev/documents/class/css/style_progressbar.css?width=250&height=20&unitwidth=px&unitheight=px" type="text/css" media="screen"/>
<!-- Fin CSS personnalisé -->
Le but était d'avoir un fichier css unique que je peut modifier dynamiquement pour être réutilisé sur la même page simplement.
Re: Des class lié entre elle.
Posté : 10 nov. 2013, 17:22
par xTG
Donc depuis 10ans on doit utilisé ta technique ? Par que ce moi j'ai fait comme dans les tuto^^.
Bah ce sont des tutoriaux qui datent d'il y a dix ans.

Ou bien leur rédacteur a du souci à se faire...
Est ce que je peux utilisé des variables d'une autre class: si par exemple j'ai une class 1 et une class 1.1 et 1.2 extends de 1.
Une variable de la class 1.1 pourra être utilisé dans la class 1.2 ? Ou ça sera seulement de la 1 vers 1.1 et 1.2 ?
Non ce sont deux instances de l'objet différentes. Seule une instance de class fille a accès aux composants de sa class mère.
Sinon, j'aimerais savoir si la génération de CSS dynamique est une bonne idée ? En gros je passe en paramètre des variables qui modifie mon fichier php qui contient le css qui grace a l'URL Rewrite est renommé en css^^, ce qui donne:
<!-- CSS personnalisé -->
<!-- Le CSS `erreur` est inconnue -->
<link rel="stylesheet" href="http://domaine.fr/admins/dev/documents/class/css/style_pagination.css?aleatoire=haut&fontsize=15&unit=px" type="text/css" media="screen"/>
<link rel="stylesheet" href="http://domaine.fr/admins/dev/documents/class/css/style_pagination.css?aleatoire=milieux&fontsize=30&unit=px" type="text/css" media="screen"/>
<link rel="stylesheet" href="http://domaine.fr/admins/dev/documents/class/css/style_pagination.css?aleatoire=bas&fontsize=50&unit=px" type="text/css" media="screen"/>
<link rel="stylesheet" href="http://domaine.fr/admins/dev/documents/class/css/style_progressbar.css?width=250&height=20&unitwidth=px&unitheight=px" type="text/css" media="screen"/>
<!-- Fin CSS personnalisé -->
Le but était d'avoir un fichier css unique que je peut modifier dynamiquement pour être réutilisé sur la même page simplement.
Cela ne pose aucun souci, leur résultat sera mis en cache comme un fichier css statique.
Re: Des class lié entre elle.
Posté : 11 nov. 2013, 14:01
par moogli
pour ce qui est du modèle objet je te conseil de trouver un tuto sur la poo php5 (qui utilise quelque chose de plus classique, certain dirais " qui se rapproche d'un vrai modèle objet").
tu y trouveras des infos sur la portée des propriétés / méthodes (public, private, protected) et pourquoi et comment utiliser cette porté.
le modèle php 4 est toujours utilisable mais ne respecte pas trop le modèle objet et du coup peu mettre le brin dans ton code si tu n'y prête pas attention
@+