Où une fonction est-elle définie (object oriented) ?

Herve_be Messages postés 1049 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 11 septembre 2024 - 23 août 2024 à 18:21
Herve_be Messages postés 1049 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 11 septembre 2024 - 26 août 2024 à 15:34

Bonjour,

Je programme en général en mode procédural, j'ai du mal avec le mode orienté objet.

Par exemple, dans un logiciel que je n'ai pas programmé moi-même je trouve l'appel à la fonction "set_cookie"

$this->user->set_cookie($cookie_name, ... )

Je trouve plusieurs définitions de cette fonction dans le logiciel dans des modules différents mais avec des comportements différents aussi.
Comment savoir laquelle (de quel module) est effectivement appelée ?

Je ne sais pas comment je dois interpréter "$this->user".

Merci d'avance pour votre aide
Windows / Chrome 127.0.0.0

A voir également:

7 réponses

jordane45 Messages postés 38238 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 6 septembre 2024 4 689
23 août 2024 à 22:26

bonjour 

dans la class où se trouve ce bout de code est instancié un objet user.

c'est à lui que fait référence ton this->user

et c'est donc la méthode setCookie qui se trouve dans la class User qui est instancié par ton code...

si tu ne trouves pas, il va falloir que tu nous partages le code complet de la class dans laquelle tu as ton bout de code.


0
Herve_be Messages postés 1049 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 11 septembre 2024 9
Modifié le 24 août 2024 à 09:28

Merci,
Le code complet est fort long, voici les lignes non consécutives qui me semblent avoir un rapport avec la classe user :

use phpbb\user;
...
class listener implements EventSubscriberInterface
{
	/** @var user $user */
	protected $user;
	 * Constructor
	 * @param user $user User object
	public function __construct(..., user $user, ...)
	{
		$this->user = $user;
	}
...
$this->user->set_cookie($cookie_name, ...);

Ça ne m'aide pas à trouver où la fonction set_cookie est définie, et toi ?

0
Whismeril Messages postés 19143 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 12 septembre 2024 919
24 août 2024 à 09:53

Bonjour Hervé

Sur CodeS SourceS tu as souvent posté des questions en VB6.

Je vais essayer de faire un parallèle.

Mais avant, je te propose de lire https://forums.commentcamarche.net/forum/affich-1663038-qu-est-ce-qu-une-classe-un-objet#3


Prenons l'objet Form, il possède un certain nombres de propriétés, par exemple un titre (Caption il me semble me souvenir en vb6).

Certaines propriétés peuvent elles aussi avoir des propriétés, Font par exemple. Je ne sais plus si cette propriété existe pour Form, mais pour une TextBox oui. Cela veut dire que Font est elle même un objet.

Le code d'un objet est écrit dans un bloc de code que l'on appelle class (un bloc contenant lui-même de nombreux blocs).

Il était possible en VB6 d'écrire ses propres classes, mais je connais très peu de gens qui le faisaient sciemment. Mais en écrivant le code d'un Form, en fait on écrivait un objet de type MaFormMachin, dont le type dérivait (on pourra parler héritage plus loin si u le souhaite) du vrai type Form.

Et puis la class de TextBox est bien écrite quelque part, dans une dll ou un ocx.

En général, une class constitue un fichier.

Ce que tu dois faire, c'est trouver le fichier / bloc de code qui définit l'objet user.


Pour ce qui est de this, il correspond à Me en VB6, à savoir, l'instance en cours de l'objet. Pour la majorité des codeurs, Me correspondait au Form en cours, mais ceux qui écrivaient leurs propres classes pouvaient s'en servir aussi.

Il est tout à fait probable que dans le code de TextBox, ce soit le cas.


0
Herve_be Messages postés 1049 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 11 septembre 2024 9
24 août 2024 à 10:03

"Ce que tu dois faire, c'est trouver le fichier / bloc de code qui définit l'objet user."

C'est bien ma question.

0
Whismeril Messages postés 19143 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 12 septembre 2024 919
24 août 2024 à 10:33

Option 1, il s'agit de la class user qui est importée par la ligne

use phpbb\user;

Et là, faut lire la doc https://www.phpbb.com/support/docs/en/

Option 2, une autre class a été importée, avec le mot clé use

Option 3, une class a été écrite dans "ton" code avec comme ça

class User

Après je connais assez peu PHP, je ne peux guère t'aiguiller plus.


0
Herve_be Messages postés 1049 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 11 septembre 2024 9
24 août 2024 à 10:57

La documentation que tu pointes est un mode d'emploi, pas un manuel technique.

Comment savoir quelle option est la bonne ?

J'ai bien un fichier phpbb\user.php mais il ne contient pas la définition de la fonction set_cookie.
Par contre je trouve cette définition à plusieurs endroits avec des comportements différents : comment savoir laquelle est effectivement utilisée ?

0
jordane45 Messages postés 38238 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 6 septembre 2024 4 689
24 août 2024 à 11:28

c'est bien l'option 1 visiblement...

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19143 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 12 septembre 2024 919
24 août 2024 à 11:05

Certain IDE permettent de remonter au code d'un attribut, en faisant un click droit dessus et en cliquant sur "Aller à la définition / déclaration" ou dans le genre.

Et de répéter si nécessaire 


0
Herve_be Messages postés 1049 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 11 septembre 2024 9
24 août 2024 à 15:10

Je pensais qu'il y aurait moyen de le trouver via "inspecter".

0
jordane45 Messages postés 38238 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 6 septembre 2024 4 689
24 août 2024 à 17:19

"inspecter" ne sert qu'à parcourir le code html de ton site à travers ton navigateur....

Comme te l'a dit Whism, tu peux utiliser un IDE comme VSCODE qui te permet ( à condition de télécharger TOUT le code source de ton site en local sur ton ordi) de retrouver les objets et les méthodes en faisant des clics droits sur les bouts de code que tu veux chercher ( ou via du control+click).

Et ainsi de remonter jusqu'à la fonction recherchée...

0

La méthode set_cookie est définie dans la classe phpbb\session (la classe phpbb\user hérite de la classe phpbb\session) :

https://github.com/phpbb/phpbb/blob/master/phpBB/phpbb/session.php#L1087

0
Herve_be Messages postés 1049 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 11 septembre 2024 9
26 août 2024 à 15:34

Merci.

Je voudrais, dans certains cas, supprimer un cookie.

Dans certaines fonctions set_cookie il est prévu qu'on puisse supprimer le cookie, pas dans celle-ci.

Par contre je lis "If no time is specified, a session cookie will be set" mais si j'appelle la fonction avec time = 0 le cookie n'est pas modifié.

0