0% found this document useful (0 votes)
26 views

PHP - Syntaxe de Base - Manual

The document summarizes basic object-oriented programming concepts in PHP, including: - Class definitions start with the class keyword followed by the class name and properties/methods within braces. - The $this pseudo-variable refers to the calling object instance within methods. - New instances are created using the new keyword followed by the class name. - Classes can extend other classes and objects can be assigned to variables or passed to functions.

Uploaded by

Amour Koffi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
26 views

PHP - Syntaxe de Base - Manual

The document summarizes basic object-oriented programming concepts in PHP, including: - Class definitions start with the class keyword followed by the class name and properties/methods within braces. - The $this pseudo-variable refers to the calling object instance within methods. - New instances are created using the new keyword followed by the class name. - Classes can extend other classes and objects can be assigned to variables or passed to functions.

Uploaded by

Amour Koffi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 18

21/11/2023 12:33 PHP: Syntaxe de base - Manual

Downloads
Documentation
Get Involved
Help

Search

Getting Started
Introduction
A simple tutorial
Language Reference
Basic syntax
Types
Variables
Constants
Expressions
Operators
Control Structures
Functions
Classes and Objects
Namespaces
Enumerations
Errors
Exceptions
Fibers
Generators
Attributes
References Explained
Predefined Variables
Predefined Exceptions
Predefined Interfaces and Classes
Predefined Attributes
Context options and parameters
Supported Protocols and Wrappers

Security
Introduction
General considerations
Installed as CGI binary
Installed as an Apache module
Session Security
Filesystem Security
Database Security
Error Reporting
User Submitted Data
Hiding PHP
Keeping Current
Features
HTTP authentication with PHP
Cookies
Sessions
Dealing with XForms
Handling file uploads
Using remote files
Connection handling
Persistent Database Connections
Command line usage
Garbage Collection
DTrace Dynamic Tracing

Function Reference
Affecting PHP's Behaviour
Audio Formats Manipulation
https://www.php.net/manual/fr/language.oop5.basic.php 1/18
21/11/2023 12:33 PHP: Syntaxe de base - Manual
Authentication Services
Command Line Specific Extensions
Compression and Archive Extensions
Cryptography Extensions
Database Extensions
Date and Time Related Extensions
File System Related Extensions
Human Language and Character Encoding Support
Image Processing and Generation
Mail Related Extensions
Mathematical Extensions
Non-Text MIME Output
Process Control Extensions
Other Basic Extensions
Other Services
Search Engine Extensions
Server Specific Extensions
Session Extensions
Text Processing
Variable and Type Related Extensions
Web Services
Windows Only Extensions
XML Manipulation
GUI Extensions

Keyboard Shortcuts
?
This help
j
Next menu item
k
Previous menu item
gp
Previous man page
gn
Next man page
G
Scroll to bottom
gg
Scroll to top
gh
Goto homepage
gs
Goto search
(current page)
/
Focus search box

Propriétés »
« Introduction

Manuel PHP
Référence du langage
Les classes et les objets

Change language: French


Submit a Pull Request Report a Bug

Syntaxe de base ¶
class ¶

Une définition de classe basique commence par le mot-clé class, suivi du nom de la classe. Suit une paire d'accolades contenant
la définition des propriétés et des méthodes appartenant à la classe.

https://www.php.net/manual/fr/language.oop5.basic.php 2/18
21/11/2023 12:33 PHP: Syntaxe de base - Manual
Le nom de la classe peut être quelconque à condition que ce ne soit pas un mot réservé en PHP. Un nom de classe valide
commence par une lettre ou un underscore, suivi de n'importe quel nombre de chiffres, ou de lettres, ou d'underscores. Si on
devait l'exprimer sous forme d'une expression rationnelle, il s'agirait de ^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$.

Une classe peut contenir ses propres constantes, variables (appelées "propriétés" ou "attributs"), et fonctions (appelées
"méthodes").

Exemple #1 Définition typique d'une classe

<?php
class SimpleClass
{
// déclaration d'une propriété
public $var = 'une valeur par défaut';

// déclaration des méthodes


public function displayVar() {
echo $this->var;
}
}
?>

La pseudo-variable $this est disponible lorsqu'une méthode est appelée depuis un contexte objet. $this est la valeur de l'objet
appelant.

Avertissement

Appeler une méthode non-statique statiquement lance une Error. Antérieur à PHP 8.0.0, ceci générait une notice d'obsolescence,
et $this était indéfini.

Exemple #2 Quelques exemples de la pseudo-variable $this

<?php
class A
{
function foo()
{
if (isset($this)) {
echo '$this is defined (';
echo get_class($this);
echo ")\n";
} else {
echo "\$this is not defined.\n";
}
}
}

class B
{
function bar()
{
A::foo();
}
}

$a = new A();
$a->foo();

A::foo();

$b = new B();
$b->bar();

B::bar();
?>

Résultat de l'exemple ci-dessus en PHP 7 :

https://www.php.net/manual/fr/language.oop5.basic.php 3/18
21/11/2023 12:33 PHP: Syntaxe de base - Manual
$this is defined (A)

Deprecated: Non-static method A::foo() should not be called statically in %s on line 27


$this is not defined.

Deprecated: Non-static method A::foo() should not be called statically in %s on line 20


$this is not defined.

Deprecated: Non-static method B::bar() should not be called statically in %s on line 32

Deprecated: Non-static method A::foo() should not be called statically in %s on line 20


$this is not defined.

Résultat de l'exemple ci-dessus en PHP 8 :

$this is defined (A)

Fatal error: Uncaught Error: Non-static method A::foo() cannot be called statically in %s :27
Stack trace:
#0 {main}
thrown in %s on line 27

Classes en lecture seule (readonly) ¶

À partir de PHP 8.2.0, une classe peut être marquée avec le modificateur readonly. Marquer une classe comme readonly ajoutera
le modificateur readonly à chaque propriété déclarée, et empêchera la création de propriétés dynamiques. En outre, il est
impossible d'ajouter leur prise en charge en utilisant l'attribut AllowDynamicProperties. Toute tentative de le faire déclenchera
une erreur de compilation.

<?php
#[\AllowDynamicProperties]
readonly class Foo {
}

// Fatal error: Cannot apply #[AllowDynamicProperties] to readonly class Foo


?>

Comme ni les propriétés non typées, ni les propriétés statiques ne peuvent être marquées avec le modificateur readonly, les
classes readonly ne peuvent pas non plus les déclarer :

<?php
readonly class Foo
{
public $bar;
}

// Fatal error: Readonly property Foo::$bar must have type


?>
<?php
readonly class Foo
{
public static int $bar;
}

// Fatal error: Readonly class Foo cannot declare static properties


?>

Une classe readonly peut être étendu si, et seulement si, la classe enfant est également une classe readonly.

Le mot-clé new ¶

Pour créer une instance d'une classe, le mot-clé new doit être utilisé. Un objet sera alors systématiquement créé, à moins qu'il ait
un constructeur défini qui lance une exception en cas d'erreur. Les classes devraient être définies avant l'instanciation (dans
certains cas, c'est impératif).

Si une chaîne de caractères contenant un nom de classe est utilisée avec new, une nouvelle instance de cette classe sera créée. Si
la classe est dans un espace de noms, son nom pleinement qualifié doit être utilisé.

Note:

https://www.php.net/manual/fr/language.oop5.basic.php 4/18
21/11/2023 12:33 PHP: Syntaxe de base - Manual
S'il n'y a pas d'arguments à passer au constructeur de la classe, les parenthèses après le nom de la classe peuvent être
omises.

Exemple #3 Création d'une instance

<?php
$instance = new SimpleClass();

// Ceci peut également être réalisé avec une variable :


$className = 'SimpleClass';
$instance = new $className(); // new SimpleClass()
?>

À partir de PHP 8.0.0, l'utilisation de new avec des expressions arbitraires est supportée. Ceci permet des instantiations plus
complexes si l'expression produit une string. L'expression doit être entourée de parenthèses.

Exemple #4 Créer une instance en utilisant une expression arbitraire

Dans l'exemple donné, nous montrons plusieurs exemples d'expressions arbitraires valides qui produisent un nom de classe. Ceci
montre un appel de fonction, une concaténation de chaînes et la constante ::class.

<?php

class ClassA extends \stdClass {}


class ClassB extends \stdClass {}
class ClassC extends ClassB {}
class ClassD extends ClassA {}

function getSomeClass(): string


{
return 'ClassA';
}

var_dump(new (getSomeClass()));
var_dump(new ('Class' . 'B'));
var_dump(new ('Class' . 'C'));
var_dump(new (ClassD::class));
?>

Résultat de l'exemple ci-dessus en PHP 8 :


object(ClassA)#1 (0) {
}
object(ClassB)#1 (0) {
}
object(ClassC)#1 (0) {
}
object(ClassD)#1 (0) {
}

Dans le contexte de la classe, il est possible de créer un nouvel objet avec new self et new parent.

Lors de l'assignation d'une instance déjà créée d'une classe à une variable, la nouvelle variable accédera à la même instance que
l'objet qui a été assigné. Ce comportement est le même lors du passage d'une instance à une fonction. Une copie d'un objet déjà
créé peut être effectuée par clonage.

Exemple #5 Assignation d'un objet

<?php

$instance = new SimpleClass();

$assigned = $instance;
$reference =& $instance;

$instance->var = '$assigned aura cette valeur';

$instance = null; // $instance et $reference deviennent null

var_dump($instance);
https://www.php.net/manual/fr/language.oop5.basic.php 5/18
21/11/2023 12:33 PHP: Syntaxe de base - Manual
var_dump($reference);
var_dump($assigned);
?>

L'exemple ci-dessus va afficher :

NULL
NULL
object(SimpleClass)#1 (1) {
["var"]=>
string(30) "$assigned aura cette valeur"
}

Il est possible de créer une instance d'un objet de quelques manières différentes :

Exemple #6 Créer de nouveaux objets

<?php
class Test
{
static public function getNew()
{
return new static;
}
}

class Child extends Test


{}

$obj1 = new Test();


$obj2 = new $obj1;
var_dump($obj1 !== $obj2);

$obj3 = Test::getNew();
var_dump($obj3 instanceof Test);

$obj4 = Child::getNew();
var_dump($obj4 instanceof Child);
?>

L'exemple ci-dessus va afficher :

bool(true)
bool(true)
bool(true)

Il est possible d'accéder à un membre d'un objet nouvellement créé en une seule expression :

Exemple #7 Accéder un membre d'un objet nouvellement créé

<?php
echo (new DateTime())->format('Y');
?>

Résultat de l'exemple ci-dessus est similaire à :

2016

Note: Antérieur à PHP 7.1, les arguments ne sont pas évalués s'il n'y a pas de fonction constructeur définie.

Propriétés et méthodes ¶
Les propriétés et méthodes de classe vivent dans des "espaces de noms" séparé, donc il est possible d'avoir une propriété et une
méthode avec le même nom. Faire référence à la fois a une propriété ainsi qu'une méthode ont la même notation, et le fait qu'une
propriété sera accédée ou qu'une méthode sera appelée, dépend seulement du contexte, c'est-à-dire si l'utilisation est un accès
variable ou un appel de fonction.

Exemple #8 Accès de propriété contre appel de méthode

<?php
class Foo

https://www.php.net/manual/fr/language.oop5.basic.php 6/18
21/11/2023 12:33 PHP: Syntaxe de base - Manual
{
public $bar = 'property';

public function bar() {


return 'method';
}
}

$obj = new Foo();


echo $obj->bar, PHP_EOL, $obj->bar(), PHP_EOL;

L'exemple ci-dessus va afficher :

property
method

Ceci signifie qu'appeler une fonction anonyme qui a été assigné à une propriété n'est pas possible directement. Au lieu de cela, la
propriété doit d'abord être affectée à une variable. Il est possible d'appeler ce genre de propriété directement en la mettant entre
parenthèses.

Exemple #9 Appeler une fonction anonyme enregistrée dans une propriété

<?php
class Foo
{
public $bar;

public function __construct() {


$this->bar = function() {
return 42;
};
}
}

$obj = new Foo();

echo ($obj->bar)(), PHP_EOL;

L'exemple ci-dessus va afficher :

42

Le mot-clé extends ¶
Une classe peut hériter des constantes, méthodes et des propriétés d'une autre classe en utilisant le mot-clé extends dans la
déclaration. Il n'est pas possible d'étendre plusieurs classes : une classe peut uniquement hériter d'une seule classe de base.

Les constantes, méthodes et propriétés héritées peuvent être redéfinies en les redéclarant avec le même nom que dans la classe
parente. Cependant, si la classe parente a défini une méthode ou constante comme final, alors celles-ci ne peuvent pas être
redéfinies. Il est possible d'accéder aux méthodes ou propriétés statiques redéfinies en y faisant référence avec l'opérateur
parent::.

Note: À partir de PHP 8.1.0, les constantes peuvent être déclaré comme finale.

Exemple #10 Héritage simple d'une classe

<?php
class ExtendClass extends SimpleClass
{
// Redéfinition de la méthode parente
function displayVar()
{
echo "Classe étendue\n";
parent::displayVar();
}
}

$extended = new ExtendClass();

https://www.php.net/manual/fr/language.oop5.basic.php 7/18
21/11/2023 12:33 PHP: Syntaxe de base - Manual
$extended->displayVar();
?>

L'exemple ci-dessus va afficher :

Classe étendue
une valeur par défaut

Règles de compatibilité de signature ¶

Lors de la surcharge d'une méthode, sa signature doit être compatible avec la méthode parente. Sinon, une erreur fatale est émise,
ou, antérieur à PHP 8.0.0, une erreur de niveau E_WARNING est générée. Une signature est compatible si elle respecte les règles de
variance, rend un paramètre obligatoire optionnel, et seulement si tous les nouveaux paramètres sont optionnels et assouplissent
les régles de visibilité. Ceci est connu sous le Principe de Substitution de Liskov (Liskov Substitution Principle), ou simplement
LSP. Le constructeur, et les méthodes private sont exclus de ces règles de compatibilité des signatures, et par conséquent
n'émettront pas d'erreur fatale en cas de signature incompatible.

Exemple #11 Méthodes enfant compatibles

<?php
class Base
{
public function foo(int $a) {
echo "Valid\n";
}
}
class Extend1 extends Base
{
function foo(int $a = 5)
{
parent::foo($a);
}
}
class Extend2 extends Base
{
function foo(int $a, $b = 5)
{
parent::foo($a);
}
}
$extended1 = new Extend1();
$extended1->foo();
$extended2 = new Extend2();
$extended2->foo(1);

L'exemple ci-dessus va afficher :

Valid
Valid

Les exemples suivants démontrent qu'une méthode enfant qui supprime un paramètre, ou rend un paramètre optionnel
obligatoire, n'est pas compatible avec la méthode parente.

Exemple #12 Erreur fatale quand une méthode enfant supprime un paramètre

<?php
class Base
{
public function foo(int $a = 5) {
echo "Valid\n";
}
}
class Extend extends Base
{
function foo()
{
parent::foo(1);
}
}

https://www.php.net/manual/fr/language.oop5.basic.php 8/18
21/11/2023 12:33 PHP: Syntaxe de base - Manual
Résultat de l'exemple ci-dessus en PHP 8 est similaire à :

Fatal error: Declaration of Extend::foo() must be compatible with Base::foo(int $a = 5) in /in/evtlq on line 13

Exemple #13 Erreur fatale quand une méthode enfant rend un paramètre optionnel obligatoire

<?php
class Base
{
public function foo(int $a = 5) {
echo "Valid\n";
}
}
class Extend extends Base
{
function foo(int $a)
{
parent::foo($a);
}
}

Résultat de l'exemple ci-dessus en PHP 8 est similaire à :

Fatal error: Declaration of Extend::foo(int $a) must be compatible with Base::foo(int $a = 5) in /in/qJXVC on line 13

Avertissement

Renommer un paramètre d'une méthode dans une classe enfant n'est pas une incompatibilité de signature. Cependant, ceci est
découragé car ceci va résulter en une Error lors du runtime si les arguments nommés sont utilisés.

Exemple #14 Erreur lors de l'utilisation des arguments nommés et que les paramètres ont été renommés dans une classe
enfant

<?php
class A {
public function test($foo, $bar) {}
}
class B extends A {
public function test($a, $b) {}
}
$obj = new B;
// Pass parameters according to A::test() contract
$obj->test(foo: "foo", bar: "bar"); // ERROR!

Résultat de l'exemple ci-dessus est similaire à :

Fatal error: Uncaught Error: Unknown named parameter $foo in /in/XaaeN:14


Stack trace:
#0 {main}
thrown in /in/XaaeN on line 14

::class ¶
Le mot clé class est également utilisé pour la résolution des noms de classes. Il est possible d'obtenir le nom complètement
qualifié d'une classe ClassName en utilisant ClassName::class. C'est particulièrement utile avec les classes utilisant des espaces de
noms.

Exemple #15 Résolution de nom de classe

<?php
namespace NS {
class ClassName {
}

echo ClassName::class;
}
?>

L'exemple ci-dessus va afficher :

NS\ClassName
https://www.php.net/manual/fr/language.oop5.basic.php 9/18
21/11/2023 12:33 PHP: Syntaxe de base - Manual
Note:

La résolution du nom de classe en utilisant ::class est une transformation lors de la compilation. C'est-à-dire à
l'instant où la chaine du nom de classe est créé aucun autochargement n'a encore eu lieu. Par conséquent, les noms
de classes sont étendues même si la classe n'existe pas. Aucune erreur n'est émise dans ce cas là.

Exemple #16 Résolution de nom de classe manquante

<?php
print Does\Not\Exist::class;
?>

L'exemple ci-dessus va afficher :

Does\Not\Exist

À partir de PHP 8.0.0, ::class peut être utilisé sur les objets. Cette résolution se produit lors de l'exécution, et non lors de la
compilation. Ses effets sont les mêmes que d'appeler get_class() sur l'objet.

Exemple #17 Résolution du nom d'un objet

<?php
namespace NS {
class ClassName {
}
}
$c = new ClassName();
print $c::class;
?>

L'exemple ci-dessus va afficher :

NS\ClassName

Méthodes et propriétés nullsafe ¶


À partir de PHP 8.0.0, les méthodes et propriétés peuvent aussi être accédés avec l'opérateur "nullsafe": ?->. L'opérateur nullsafe
fonctionne à l'identique que l'accès de propriétés ou méthodes comme si dessus, à l'exception que si l'objet qui est déréférencé est
null alors null sera retourné au lieu de lancer une exception. Si le déréférencement fait par d'une chaîne, le reste de la chaîne est
ignoré.

L'effet est similaire à entourer chaque accès par une vérification avec is_null() d'abord, mais plus compact.

Exemple #18 Opérateur nullsafe

<?php

// À partir de PHP 8.0.0, cette ligne:


$result = $repository?->getUser(5)?->name;

// Est équivalente à bloc de code suivant :


if (is_null($repository)) {
$result = null;
} else {
$user = $repository->getUser(5);
if (is_null($user)) {
$result = null;
} else {
$result = $user->name;
}
}
?>

Note:

L'opérateur nullsafe est mieux utilisé quand null est considéré une valeur valide et potentiellement attendu pour une
propriété ou valeur de retour d'une méthode. Pour indiquer une erreur, lancer une exception est préférable.
+add a note

https://www.php.net/manual/fr/language.oop5.basic.php 10/18
21/11/2023 12:33 PHP: Syntaxe de base - Manual

User Contributed Notes 11 notes


up
down
632
aaron at thatone dot com ¶
15 years ago
I was confused at first about object assignment, because it's not quite the same as normal assignment or assignment
by reference. But I think I've figured out what's going on.

First, think of variables in PHP as data slots. Each one is a name that points to a data slot that can hold a value
that is one of the basic data types: a number, a string, a boolean, etc. When you create a reference, you are
making a second name that points at the same data slot. When you assign one variable to another, you are copying
the contents of one data slot to another data slot.

Now, the trick is that object instances are not like the basic data types. They cannot be held in the data slots
directly. Instead, an object's "handle" goes in the data slot. This is an identifier that points at one particular
instance of an obect. So, the object handle, although not directly visible to the programmer, is one of the basic
datatypes.

What makes this tricky is that when you take a variable which holds an object handle, and you assign it to another
variable, that other variable gets a copy of the same object handle. This means that both variables can change the
state of the same object instance. But they are not references, so if one of the variables is assigned a new value,
it does not affect the other variable.

<?php
// Assignment of an object
Class Object{
public $foo="bar";
};

$objectVar = new Object();


$reference =& $objectVar;
$assignment = $objectVar

//
// $objectVar --->+---------+
// |(handle1)----+
// $reference --->+---------+ |
// |
// +---------+ |
// $assignment -->|(handle1)----+
// +---------+ |
// |
// v
// Object(1):foo="bar"
//
?>

$assignment has a different data slot from $objectVar, but its data slot holds a handle to the same object. This
makes it behave in some ways like a reference. If you use the variable $objectVar to change the state of the Object
instance, those changes also show up under $assignment, because it is pointing at that same Object instance.

<?php
$objectVar->foo = "qux";
print_r( $objectVar );
print_r( $reference );
print_r( $assignment );

//
// $objectVar --->+---------+
// |(handle1)----+
// $reference --->+---------+ |
// |
// +---------+ |
// $assignment -->|(handle1)----+
// +---------+ |
// |
// v
https://www.php.net/manual/fr/language.oop5.basic.php 11/18
21/11/2023 12:33 PHP: Syntaxe de base - Manual
// Object(1):foo="qux"
//
?>

But it is not exactly the same as a reference. If you null out $objectVar, you replace the handle in its data slot
with NULL. This means that $reference, which points at the same data slot, will also be NULL. But $assignment,
which is a different data slot, will still hold its copy of the handle to the Object instance, so it will not be
NULL.

<?php
$objectVar = null;
print_r($objectVar);
print_r($reference);
print_r($assignment);

//
// $objectVar --->+---------+
// | NULL |
// $reference --->+---------+
//
// +---------+
// $assignment -->|(handle1)----+
// +---------+ |
// |
// v
// Object(1):foo="qux"
?>
up
down
84
kStarbe at gmail point com ¶
6 years ago
You start using :: in second example although the static concept has not been explained. This is not easy to
discover when you are starting from the basics.
up
down
29
Hayley Watson ¶
5 years ago
Class names are case-insensitive:
<?php
class Foo{}
class foo{} //Fatal error.
?>

Any casing can be used to refer to the class


<?php
class bAr{}
$t = new Bar();
$u = new bar();
echo ($t instanceof $u) ? "true" : "false"; // "true"
echo ($t instanceof BAR) ? "true" : "false"; // "true"
echo is_a($u, 'baR') ? "true" : "false"; // "true"
?>

But the case used when the class was defined is preserved as "canonical":
<?php
echo get_class($t); // "bAr"
?>

And, as always, "case-insensitivity" only applies to ASCII.


<?php
class пасха{}
class Пасха{} // valid
$p = new ПАСХА(); // Uncaught warning.
?>
up
down
https://www.php.net/manual/fr/language.oop5.basic.php 12/18
21/11/2023 12:33 PHP: Syntaxe de base - Manual
129
Doug ¶
13 years ago
What is the difference between $this and self ?

Inside a class definition, $this refers to the current object, while self refers to the current class.

It is necessary to refer to a class element using self ,


and refer to an object element using $this .
Note also how an object variable must be preceded by a keyword in its definition.

The following example illustrates a few cases:

<?php
class Classy {

const STAT = 'S' ; // no dollar sign for constants (they are always static)
static $stat = 'Static' ;
public $publ = 'Public' ;
private $priv = 'Private' ;
protected $prot = 'Protected' ;

function __construct( ){ }

public function showMe( ){


print '<br> self::STAT: ' . self::STAT ; // refer to a (static) constant like this
print '<br> self::$stat: ' . self::$stat ; // static variable
print '<br>$this->stat: ' . $this->stat ; // legal, but not what you might think: empty result
print '<br>$this->publ: ' . $this->publ ; // refer to an object variable like this
print '<br>' ;
}
}
$me = new Classy( ) ;
$me->showMe( ) ;

/* Produces this output:


self::STAT: S
self::$stat: Static
$this->stat:
$this->publ: Public
*/
?>
up
down
61
wbcarts at juno dot com ¶
15 years ago
CLASSES and OBJECTS that represent the "Ideal World"

Wouldn't it be great to get the lawn mowed by saying $son->mowLawn()? Assuming the function mowLawn() is defined,
and you have a son that doesn't throw errors, the lawn will be mowed.

In the following example; let objects of type Line3D measure their own length in 3-dimensional space. Why should I
or PHP have to provide another method from outside this class to calculate length, when the class itself holds all
the neccessary data and has the education to make the calculation for itself?

<?php

/*
* Point3D.php
*
* Represents one locaton or position in 3-dimensional space
* using an (x, y, z) coordinate system.
*/
class Point3D
{
public $x;
public $y;

https://www.php.net/manual/fr/language.oop5.basic.php 13/18
21/11/2023 12:33 PHP: Syntaxe de base - Manual
public $z; // the x coordinate of this Point.

/*
* use the x and y variables inherited from Point.php.
*/
public function __construct($xCoord=0, $yCoord=0, $zCoord=0)
{
$this->x = $xCoord;
$this->y = $yCoord;
$this->z = $zCoord;
}

/*
* the (String) representation of this Point as "Point3D(x, y, z)".
*/
public function __toString()
{
return 'Point3D(x=' . $this->x . ', y=' . $this->y . ', z=' . $this->z . ')';
}
}

/*
* Line3D.php
*
* Represents one Line in 3-dimensional space using two Point3D objects.
*/
class Line3D
{
$start;
$end;

public function __construct($xCoord1=0, $yCoord1=0, $zCoord1=0, $xCoord2=1, $yCoord2=1, $zCoord2=1)


{
$this->start = new Point3D($xCoord1, $yCoord1, $zCoord1);
$this->end = new Point3D($xCoord2, $yCoord2, $zCoord2);
}

/*
* calculate the length of this Line in 3-dimensional space.
*/
public function getLength()
{
return sqrt(
pow($this->start->x - $this->end->x, 2) +
pow($this->start->y - $this->end->y, 2) +
pow($this->start->z - $this->end->z, 2)
);
}

/*
* The (String) representation of this Line as "Line3D[start, end, length]".
*/
public function __toString()
{
return 'Line3D[start=' . $this->start .
', end=' . $this->end .
', length=' . $this->getLength() . ']';
}
}

/*
* create and display objects of type Line3D.
*/
echo '<p>' . (new Line3D()) . "</p>\n";
echo '<p>' . (new Line3D(0, 0, 0, 100, 100, 0)) . "</p>\n";
echo '<p>' . (new Line3D(0, 0, 0, 100, 100, 100)) . "</p>\n";

?>

https://www.php.net/manual/fr/language.oop5.basic.php 14/18
21/11/2023 12:33 PHP: Syntaxe de base - Manual

<-- The results look like this -->

Line3D[start=Point3D(x=0, y=0, z=0), end=Point3D(x=1, y=1, z=1), length=1.73205080757]

Line3D[start=Point3D(x=0, y=0, z=0), end=Point3D(x=100, y=100, z=0), length=141.421356237]

Line3D[start=Point3D(x=0, y=0, z=0), end=Point3D(x=100, y=100, z=100), length=173.205080757]

My absolute favorite thing about OOP is that "good" objects keep themselves in check. I mean really, it's the exact
same thing in reality... like, if you hire a plumber to fix your kitchen sink, wouldn't you expect him to figure
out the best plan of attack? Wouldn't he dislike the fact that you want to control the whole job? Wouldn't you
expect him to not give you additional problems? And for god's sake, it is too much to ask that he cleans up before
he leaves?

I say, design your classes well, so they can do their jobs uninterrupted... who like bad news? And, if your classes
and objects are well defined, educated, and have all the necessary data to work on (like the examples above do),
you won't have to micro-manage the whole program from outside of the class. In other words... create an object, and
LET IT RIP!
up
down
4
pawel dot zimnowodzki at gmail dot com ¶
1 year ago
Although there is no null-safe operator for not existed array keys I found workaround for it:
($array['not_existed_key'] ?? null)?->methodName()
up
down
38
Notes on stdClass ¶
14 years ago
stdClass is the default PHP object. stdClass has no properties, methods or parent. It does not support magic
methods, and implements no interfaces.

When you cast a scalar or array as Object, you get an instance of stdClass. You can use stdClass whenever you need
a generic object instance.
<?php
// ways of creating stdClass instances
$x = new stdClass;
$y = (object) null; // same as above
$z = (object) 'a'; // creates property 'scalar' = 'a'
$a = (object) array('property1' => 1, 'property2' => 'b');
?>

stdClass is NOT a base class! PHP classes do not automatically inherit from any class. All classes are standalone,
unless they explicitly extend another class. PHP differs from many object-oriented languages in this respect.
<?php
// CTest does not derive from stdClass
class CTest {
public $property1;
}
$t = new CTest;
var_dump($t instanceof stdClass); // false
var_dump(is_subclass_of($t, 'stdClass')); // false
echo get_class($t) . "\n"; // 'CTest'
echo get_parent_class($t) . "\n"; // false (no parent)
?>

You cannot define a class named 'stdClass' in your code. That name is already used by the system. You can define a
class named 'Object'.

You could define a class that extends stdClass, but you would get no benefit, as stdClass does nothing.

(tested on PHP 5.2.8)


up
down
25
moty66 at gmail dot com ¶
https://www.php.net/manual/fr/language.oop5.basic.php 15/18
21/11/2023 12:33 PHP: Syntaxe de base - Manual
14 years ago
I hope that this will help to understand how to work with static variables inside a class

<?php

class a {

public static $foo = 'I am foo';


public $bar = 'I am bar';

public static function getFoo() { echo self::$foo; }


public static function setFoo() { self::$foo = 'I am a new foo'; }
public function getBar() { echo $this->bar; }
}

$ob = new a();


a::getFoo(); // output: I am foo
$ob->getFoo(); // output: I am foo
//a::getBar(); // fatal error: using $this not in object context
$ob->getBar(); // output: I am bar
// If you keep $bar non static this will work
// but if bar was static, then var_dump($this->bar) will output null

// unset($ob);
a::setFoo(); // The same effect as if you called $ob->setFoo(); because $foo is static
$ob = new a(); // This will have no effects on $foo
$ob->getFoo(); // output: I am a new foo

?>

Regards
Motaz Abuthiab
up
down
1
johannes dot kingma at gmail dot com ¶
1 year ago
BEWARE!

Like Hayley Watson pointed out class names are not case sensitive.

<?php
class Foo{}
class foo{} // Fatal error: Cannot declare class foo, because the name is already in use
?>
As well as
<?php
class BAR{}
$bar = new Bar();
echo get_class($bar);
?>

Is perfectly fine and will return 'BAR'.

This has implications on autoloading classes though. The standard spl_autoload function will strtolower the class
name to cope with case in-sensitiveness and thus the class BAR can only be found if the file name is bar.php (or
another variety if an extension was registered with spl_autoload_extensions(); ) not BAR.php for a case sensitive
file and operating system like linux. Windows file system is case sensitive but the OS is not and there for
autoloading BAR.php will work.
up
down
5
Anonymous ¶
5 years ago
At first I was also confused by the assignment vs referencing but here's how I was finally able to get my head
around it. This is another example which is somewhat similar to one of the comments but can be helpful to those who
did not understand the first example. Imagine object instances as rooms where you can store and manipulate your
properties and functions. The variable that contains the object simply holds 'a key' to this room and thus access

https://www.php.net/manual/fr/language.oop5.basic.php 16/18
21/11/2023 12:33 PHP: Syntaxe de base - Manual
to the object. When you assign this variable to another new variable, what you are doing is you're making a copy of
the key and giving it to this new variable. That means these two variable now have access to the same 'room'
(object) and can thus get in and manipulate the values. However, when you create a reference, what you doing is
you're making the variables SHARE the same key. They both have access to the room. If one of the variable is given
a new key, then the key that they are sharing is replaced and they now share a new different key. This does not
affect the other variable with a copy of the old key...that variable still has access to the first room
up
down
14
Jeffrey ¶
15 years ago
A PHP Class can be used for several things, but at the most basic level, you'll use classes to "organize and deal
with like-minded data". Here's what I mean by "organizing like-minded data". First, start with unorganized data.

<?php
$customer_name;
$item_name;
$item_price;
$customer_address;
$item_qty;
$item_total;
?>

Now to organize the data into PHP classes:

<?php
class Customer {
$name; // same as $customer_name
$address; // same as $customer_address
}

class Item {
$name; // same as $item_name
$price; // same as $item_price
$qty; // same as $item_qty
$total; // same as $item_total
}
?>

Now here's what I mean by "dealing" with the data. Note: The data is already organized, so that in itself makes
writing new functions extremely easy.

<?php
class Customer {
public $name, $address; // the data for this class...

// function to deal with user-input / validation


// function to build string for output
// function to write -> database
// function to read <- database
// etc, etc
}

class Item {
public $name, $price, $qty, $total; // the data for this class...

// function to calculate total


// function to format numbers
// function to deal with user-input / validation
// function to build string for output
// function to write -> database
// function to read <- database
// etc, etc
}
?>

Imagination that each function you write only calls the bits of data in that class. Some functions may access all

https://www.php.net/manual/fr/language.oop5.basic.php 17/18
21/11/2023 12:33 PHP: Syntaxe de base - Manual
the data, while other functions may only access one piece of data. If each function revolves around the data
inside, then you have created a good class.
+add a note

Les classes et les objets


Introduction
Syntaxe de base
Propriétés
Constantes de classe
Auto-​chargement de classes
Constructeurs et destructeurs
Visibilité
Héritage
L'opérateur de résolution de portée (::)
Statique
Abstraction de classes
Interfaces
Traits
Classes anonymes
Surcharge magique
Parcours d'objets
Méthodes magiques
Mot-​clé "final"
Clonage d'objets
Comparaison d'objets
Late Static Bindings (Résolution statique à la volée)
Objets et références
Sérialisation d'objets
Covariance et Contravariance
Modifications en POO (Programmation orientée objet)

Copyright © 2001-2023 The PHP Group


My PHP.net
Contact
Other PHP.net sites
Privacy policy

https://www.php.net/manual/fr/language.oop5.basic.php 18/18

You might also like