Access Modifiers PHP

A

Kuten muutkin kielet, PHP toteuttaa myös jonkin verran tilaa luokan menetelmille tai attribuuteille. Käyttöoikeusmuuttujat määrittävät, missä luokan muuttujia tai menetelmiä voidaan käyttää. Tässä artikkelissa opit aiheesta pääsyn muokkaajat PHP:ssä OOP ja niiden tyypit.

PHP:n pääsynmuutosten tyypit

PHP:ssä on kolme pääsyn muokkaajaa.

Julkinen – Kun luot menetelmän tai attribuutin PHP-luokassa etkä määritä käyttöoikeusmuuttujaa, se asetetaan oletuksena julkiseksi. Tässä tilassa menetelmä tai attribuutti on käytettävissä kaikkialla.

Yksityinen – Kun luot menetelmän tai muuttujan yksityisellä käyttöoikeusmuuntimella, se on käytettävissä vain luokassa, jossa se on luotu.

Suojattu – Suojattu menetelmä tai attribuutti on käytettävissä luokassa, jossa se on luotu. Tästä luokasta johdetut luokat voivat myös olla suojattu menetelmä ja attribuutti.

esimerkki

<?php
class Person{
  public $name;
  protected $age;
  private $height;
}

$x= new Person();
$x->name = 'Jawad'; // OK
$x->age= '32'; // ERROR
$x->height= '5.4'; // ERROR
?>

Selitys yllä olevasta esimerkistä

  • Yllä olevassa esimerkissä luomme luokan Henkilö, jossa on kolmen tyyppisiä attribuutteja kolmella eri tyyppisellä käyttöoikeusmäärittimellä.
  • Nimi-attribuutti on asetettu julkiseksi. Ikä ja pituus on asetettu suojatuiksi ja yksityisiksi.
  • Kun yritämme käyttää määritteen nimeä luokan ulkopuolella ja antaa sille arvoa, se toimii hyvin.
  • Mutta kun yritämme antaa arvoa ikä- ja pituusmääritteille luokan ulkopuolella, se tuottaa kohtalokkaan virheen.

Joten yllä olevasta esimerkistä sinulla on selkeä käsitys PHP:n käyttöoikeusmäärityksistä. Harjoitellaan menetelmiä.

Julkiset, yksityiset ja suojatut menetelmät PHP:ssä

<?php
class Person{
  public $name;
  public $age;
  public $height;

  function set_name($n) {  // a public function (default)
    $this->name = $n;
  }
  protected function set_age($a) { // a protected function
    $this->age = $a;
  }
  private function set_height($h) { // a private function
    $this->height = $h;
  }
}

$person = new Person();
$person->set_name('Jawad'); // OK
$person->set_age('26'); // ERROR
$person->set_height('5.4'); // ERROR
?>

Selitys yllä olevasta esimerkistä

  • Yllä olevassa esimerkissä luomme luokan Henkilö, jossa on kolmen tyyppisiä menetelmiä kolmella eri tyyppisellä pääsymäärittäjällä.
  • Nimimenetelmä on asetettu julkiseksi. Ikä ja pituus on asetettu suojatuiksi ja yksityisiksi.
  • Kun yritämme käyttää menetelmän nimeä luokan ulkopuolella ja antaa sille arvoa, se toimii hyvin.
  • Mutta kun yritämme antaa arvoa ikä- ja pituusmenetelmille luokan ulkopuolella, se tuottaa kohtalokkaan virheen.

Muut kuin nämä kolme pääsyn muokkaajaa, meillä on abstrakteja ja lopullisia pääsymääritteitä PHP/:ssä. Seuraavassa osiossa opit ne esimerkkien avulla.

Abstract Access-muunnin PHP:ssä

Abstrakti käyttöoikeusmuunnin voi koskea vain luokkaa ja menetelmiä. Emme voi käyttää abstrakteja luokkaattribuuttien kanssa.

Kun käytämme abstraktia luokassa, sen objektia ei voi käynnistää, koska sillä ei ole konstruktoria.

Muista myös, että jos et käytä abstraktia käyttöoikeusmuunninta luokan kanssa, ja ilmoita siinä jokin abstrakti metodi. Luokasta tulee kokonaisuutena abstrakti.

Esimerkiksi

<?php

abstract class Bike {

    private $maxSpeed = 80;

    // Simple method
    public function drivingSpeed() {
        return "Driving at " . $this->maxSpeed . " kilometer/hour";
    }

    // Abstract method
    abstract public function drive();
}

class Police extends Bike {

    public function drive() {
        return "Driving out of speed limit.";
    }

}

$bike= new Police();
echo $bike->drivingSpeed();

?>
  • Yllä olevassa esimerkissä luomme abstraktin luokan Bike, joka sisältää abstraktin metodin drive().
  • Luomme toisen luokan, joka toteuttaa abstraktin metodiaseman.
  • Koska emme voi luoda abstraktin luokan objektia, käytämme Police-luokkaa.

Lopullisen pääsyn muokkaaja PHP:ssä

Kuten abstraktia käyttöoikeusmuuttujaa, emme voi käyttää PHP:n lopullista käyttöoikeusmuuttajaa luokan attribuuttien kanssa. Voimme tehdä luokasta tai sen menetelmistä lopullisia.

Muut luokat eivät voi periä luokkaa, jolla on viimeinen avainsana. Tästä luokasta johdetut alaluokat eivät myöskään voi ohittaa menetelmää, jossa on lopullinen pääsymuuttaja.

Esimerkiksi – PHP:n viimeinen luokka

<?php

final class ParentClass {

    final function msg1() {
        echo "Method 1 of final class";
    }

    function msg2() {
        echo "Method 2 of final class";
    }
}

$obj1 = new ParentClass();
$obj1->msg1();
$obj1->msg2();

?>
  • Yllä olevassa luokassa luomme lopullisen menetelmän msg1() ja yksinkertaisen menetelmän msg2().
  • Emme voi ohittaa lopullista menetelmää msg1(). Metodit msg2() voi kuitenkin ohittaa sen perivä luokka.
  • Yritä harjoitella tätä ongelmaa luomalla luokka, joka laajentaa yläluokkaa. Toteuta molemmat menetelmät ja tarkista, mikä menetelmä aiheuttaa virheen ohittaessaan.

Toinen esimerkki – lopullinen menetelmä PHP:ssä

<?php

class ParentClass {

    final function msg1() {
        echo "Final Method 1 of simple class";
    }

    function msg2() {
        echo "Simple method 2 of simple class";
    }
}

class ChildClass extends ParentClass {

    function msg1() {
        echo "Trying final method to override.";
    }

}

?>
  • Yllä olevassa esimerkissä luomme ei-lopullisen tai yksinkertaisen luokan, jolla on kaksi menetelmää. msg1() on viimeinen menetelmä ja msg2() on yksinkertainen.
  • Luomme lapsiluokan, joka laajentaa yläluokkaa ja yritämme ohittaa pääluokan viimeisen menetelmän msg1().
  • Se tuottaa kohtalokkaan virheen, etkä voi ohittaa yläluokan lopullista menetelmää.

lisää kommentti

Tutor-verkosto

Opi PHP pisteestä A paikkaan Z