La portée détermine le partie d'un programme, dans laquelle une variable peut être utilisée.

La portée des variables diffère selon leur emplacement au sein du code PHP. En fait, lorsqu'une variable est déclarée au sein d'un bloc de code comme une classe ou une méthode, elle ne peut être utilisée que dans ce même bloc.

class classe_comptage {
  /* i est utilisable dans toute la classe 
      y compris dans ses méthodes */
  $i = 0;

  public function compteur(){
  // pas est seulement utilisable
// dans la méthode compteur
$pas = 5 while($this->i <= 100){ echo $this->i . 'rn'; $this->i += 5; } } }

Les variables définies dans la classe, appelées champs ou attributs, sont accessibles dans toutes les méthodes de cette classe. Toutefois, il faut utiliser le mot-clé $this, qui fait référence à l'objet courant, pour appeler les attributs.

$this->variable;

Par défaut, les variables possèdent une portée essentiellement locale dans dans leurs blocs respectifs délimités par des accolades.

{
  $x = 1;
  // seul x est accessible à cet endroit
  {
    // x est accessible à cet endroit,
// y n'est pas accessible puisque la
// variable n'est pas encore déclarée
$y = 2; // x et y sont accessibles } // y n'est pas accessible,
// x est accessible à cet endroit
}

En se fondant sur cette règle, une variable définie dans une classe peut être accèdée dans toute la classe et une autre définie dans une méthode restera accessible dans cette seule méthode.

class calcul {
  $a = 10;
  public afficher(){
    $b = 4;
    echo"resultat : " + $this->a * b);
  }
}

Il est possible de déterminer la portée des variables plus précisément, par le truchement d'un modificateur d'accès.

Les variables peuvent avoir une portée globale, soit une accessibilité entre toutes les classes, à condition d'utiliser le modificateur d'accès public lors de leur déclaration.

class affichage {
  public $texte = 'Un texte...';

  public function affiche(){
    echo $this->texte;
}

class modification {
  public function ajout(){
    $this->texte .= 'Un second paragraphe...';
  }
}

La portée entre classe peut être limitée aux seules sous-classes, en déclarant une variable avec le modificateur d'accès protected.

Les variables déclarées avec le modificateur d'accès private ne peuvent être accédées que dans la classe elle-même.

private string chaine = "Une chaîne de caractères...";

Un programme reposant sur des variables globales peut être à l'origine de bogues difficiles à détecter. C'est pourquoi, il est préférable d'utiliser des variables locales offrant plus de sûreté avec une durée de vie limitée.

Exemple
class calcul{
  private $a = 1;
  public function addition(){
    $b = 1;
    $b += $this->a;
    // $this->a = 2
  }
  public function soustraction(){
    $c = 1;
    $c -= $this->a + $b;
    /* provoque une erreur car b n'est
        accessible que dans addition() */
  }
}