Les champs qui ne portent pas le modificateur static sont dénommés des attributs.

Les attributs sont des éléments variables d'un objet. Ils possèdent chacun un nom, un type implicite, ainsi qu'une valeur qui constitue l'état d'un objet.

class Classe {
  public $attribut;
  public function __construct($valeur){
    $this->attribut;
  }
}

$o1 = new Classe(10);
$o2 = new Classe(2);
$o3 = new Classe(5);
$o4 = new Classe(0);
$o4->attribut = $o2->attribut * $o3->attribut;

Chaque instance d'une même classe peut possèder un état différent, ceux sont les valeurs de l'ensemble des attributs de ces objets qui sont susceptibles d'avoir été initialisées, puis exploités différement.

Les attributs sont accessibles dans toutes les méthodes de cette classe. Toutefois, il faut utiliser la pseudo variable $this, qui fait référence à l'objet courant, pour appeler les champs.

class Classe {
  public $attribut;

  public function uneMethode(){
    $this->attribut = 'Une valeur';
  }
}

L'accès aux champs, depuis l'extérieur de leur classe, doit passer obligatoirement par l'instanciation de ces classes.

En outre, la visibilité à l'extérieur de la classe dépend du modificateur d'accès spécifié.

class Classe {
  public $attribut;
  private $atribut_2;
}

$obj = new Classe();
$obj->attribut = 'Une valeur';
echo $obj->attribut;

//$obj->attribut_2 = 'Une valeur'; //ERREUR !!!
//echo $obj->attribut_2; //ERREUR !!!