Bonjour,

J'ai lu et relu les cours et tutos, en particulier ce chapitre, mais il doit vraiment y avoir un (gros) point que j'ai loupé :

J'ai créé une méthode "private" dans une classe et pourtant, j'accede à cette méthode depuis le code avec un objet de cette classe, comme si la méthode avait été déclarée "public".

Je souhaiterai ne pouvoir accéder à cette méthode QUE depuis l'intérieur de la classe.

Qu'ais-je loupé .. ? Comment procéder pour que l'accès à ma méthode privée ne soit possible QUE depuis l'intérieur de la classe ?

Je me doute bien que c'est une belle question de noob, mais même pas honte, même pas peur

Merci d'avance


Un extrait de la classe en question:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
class PDO3 extends PDO2 {
 
	/* Variables de la classe */
	private $_debug		= false;
	protected $_pdo		= NULL;
 
 
	/* Constructeur : héritage public obligatoire par héritage de PDO */
	public function __construct($pdo)
	{
		$pdo_ext = $this->checkPdoExtension();
 
		if (isset($pdo) && $pdo_ext) {
 
			$this->_pdo = $pdo;
 
		}
		else {
			throw new PDOException("No pdo connection");
		}
	}
	/**
	* Comptage du nbre enregistrements DISTINCTS pour un champ donné avec condition (par requête préparée)
	* @return	: $count
	*/
	private function countDistinct($table_name, $field, $sql_condition) {
 
		$sql_prep = "SELECT DISTINCT $field FROM $table_name WHERE $sql_condition" ;
		$query	= $this->_pdo->prepare($sql_prep) ;
		$query->execute();
		$count = count($query->fetchColumn());
		$query->closeCursor();
		return $count;
	}
 
	/**
	* Comptage du nbre enregistrements DISTINCTS pour un champ donné avec condition (par requete préparée)
	* @return	: $count
	*/
 
	public function isUnique($table_name, $field, $sql_condition) {
		// méthode alternative : voir http://php.developpez.com/faq/?page=pdo#pdo-count
 
		$count = $this->countDistinct($table_name, $field, $sql_condition) ;
 
		$unique = ($count == 1) ? true : false ;
 
		return $unique;
	}
Et depuis le code, j'accède aussi bien à la méthode publique qu'à la méthode privée, alors que je pensais - voire j'espérais - me faire renvoyer sur une erreur du style Fatal error: Cannot access private method, mais non, pas d'erreur, et la méthode - supposée privée - me renvoie bien les bonnes valeurs... :
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
$count = $pdo->countDistinct($table_name, $field, $sql_condition);
$unique = ($pdo->isUnique($table_name, $field, $sql_condition))? "ok":"nok";
if (DEBUG) echo "<br/>DEBUG: unique= $unique ($count)";

Je n'arrive pas à trouver la cause de ce problème.