Kintamųjų ir metodų matomumas (angl. visibility) PHP klasėse

ProgramavimasPHP

0 • 3639 •

Klasės kintamųjų bei metodų matomumas gali būti apibrėžtas nurodant prieš pavadinimą vieną iš priežodžių: public, protected arba private. Public tipo metodai ir kintamieji gali būti pasiekiami iš bet kur. Protected tuo tarpu gali pasiekti tik tėvinė ir vaiko klasė. Private leidžia pasiekti metodus ir kintamuosius tik tai klasei, kuriai jie priklauso

Kintamųjų matomumas 

public;
      echo $this->protected;
      echo $this->private;
    }
  }
  
  $obj = new MyClass();
  echo $obj->public; // Works
  echo $obj->protected; // Fatal Error
  echo $obj->private; // Fatal Error
  $obj->printHello(); // Shows Public, Protected and Private
  
  /**
  * Define MyClass2
  */
  class MyClass2 extends MyClass
  {
    // We can redeclare the public and protected method, but not private
    protected $protected = 'Protected2';
    
    function printHello()
    {
      echo $this->public;
      echo $this->protected;
      echo $this->private;
    }
  }
  
  $obj2 = new MyClass2();
  echo $obj2->public; // Works
  echo $obj2->private; // Undefined
  echo $obj2->protected; // Fatal Error
  $obj2->printHello(); // Shows Public, Protected2, Undefined
?> 

Metodų matomumas

Jeigu metodui nėra nurodyta nei public, nei protected, nei private, jis laikomas public.

  /**
* Define MyClass
*/
class MyClass
{
// Declare a public constructor
public function __construct() { }

// Declare a public method
public function MyPublic() { }

// Declare a protected method
protected function MyProtected() { }

// Declare a private method
private function MyPrivate() { }

// This is public
function Foo()
{
$this->MyPublic();
$this->MyProtected();
$this->MyPrivate();
}
}

$myclass = new MyClass;
$myclass->MyPublic(); // Works
$myclass->MyProtected(); // Fatal Error
$myclass->MyPrivate(); // Fatal Error
$myclass->Foo(); // Public, Protected and Private work


/**
* Define MyClass2
*/
class MyClass2 extends MyClass
{
// This is public
function Foo2()
{
$this->MyPublic();
$this->MyProtected();
$this->MyPrivate(); // Fatal Error
}
}

$myclass2 = new MyClass2;
$myclass2->MyPublic(); // Works
$myclass2->Foo2(); // Public and Protected work, not Private

class Bar
{
public function test() {
$this->testPrivate();
$this->testPublic();
}

public function testPublic() {
echo "Bar::testPublic\n";
}

private function testPrivate() {
echo "Bar::testPrivate\n";
}
}

class Foo extends Bar
{
public function testPublic() {
echo "Foo::testPublic\n";
}

private function testPrivate() {
echo "Foo::testPrivate\n";
}
}

$myFoo = new foo();
$myFoo->test(); // Bar::testPrivate
// Foo::testPublic
?>

 

Pamoka pateikta

Facebook