Newidwyr Mynediad yn PHP

Adeiladwyr a Dinistrwyr yn PHP
Etifeddiaeth yn PHP OOP

Yn PHP, mae addaswyr mynediad yn rhan bwysig o raglennu gwrthrych-ganolog (OOP). Maent yn nodi cwmpas newidynnau neu ddulliau dosbarth a sut y gellir eu cyrchu. Yn y swydd hon, byddwn yn edrych ar y gwahanol fathau o addaswyr mynediad yn PHP ac yn cynnig enghreifftiau o sut i'w defnyddio.

Mathau Addasydd Mynediad yn PHP

Yn PHP, mae addaswyr mynediad yn cael eu dosbarthu fel rhai cyhoeddus, preifat neu warchodedig.

  • Cyhoeddus: Gellir cyrchu dull neu briodoledd a osodir i'r cyhoedd ym mhobman. Dyma'r addasydd mynediad rhagosodedig yn PHP.
  • Preifat: Dim ond o fewn y dosbarth y mae wedi'i greu ynddo y gellir cael mynediad at ddull neu briodoledd sydd wedi'i osod yn breifat.
  • Gwarchodedig: Gellir cyrchu dull neu briodoledd a ddiogelir o fewn y dosbarth y mae wedi'i greu ynddo, yn ogystal ag mewn dosbarthiadau sy'n etifeddu o'r dosbarth hwnnw.

Enghreifftiau

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

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

Yn yr enghraifft uchod, rydym yn diffinio dosbarth “Person” gyda thair priodoledd, pob un ag addasydd mynediad ar wahân. Mae'r briodwedd “enw” yn gyhoeddus, mae'r briodwedd “oedran” wedi'i diogelu, ac mae'r briodoledd “uchder” yn breifat. Pan geisiwn gyrchu'r nodwedd “enw” y tu allan i'r dosbarth ac ychwanegu gwerth ato, mae popeth yn gweithio'n iawn. Fodd bynnag, mae ceisio ychwanegu gwerthoedd at y priodweddau “oedran” ac “uchder” y tu allan i'r dosbarth yn arwain at gamgymeriad angheuol.

Dulliau Cyhoeddus, Preifat a Gwarchodedig

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('John'); // OK
$person->set_age('26'); // ERROR
$person->set_height('5.4'); // ERROR

Yn yr enghraifft uchod, rydym yn adeiladu dosbarth “Person” gyda thri dull, pob un ag addasydd mynediad ar wahân. Mae'r dull “enw gosod” yn gyhoeddus, mae'r dull “oedran gosodedig” yn cael ei ddiogelu, ac mae'r dull “uchder gosod” yn breifat. Pan geisiwn ddefnyddio'r swyddogaeth “enw gosod” o'r tu allan i'r dosbarth, mae'n gweithio'n dda. Pan geisiwn alw’r dulliau “oedran gosod” ac “uchder gosod” o’r tu allan i’r dosbarth, rydym yn cael gwall angheuol.

Addaswyr Mynediad Uwch: Haniaethol a Therfynol

Mae PHP yn darparu addaswyr mynediad soffistigedig o'r enw “haniaethol” a “terfynol” yn ogystal â'r addaswyr mynediad rheolaidd.

  • Dim ond ar ddosbarthiadau a dulliau y gellir defnyddio addasydd mynediad haniaethol. Fe'i defnyddir i lunio glasbrint dosbarth, fodd bynnag ni ellir gosod y dosbarth ar unwaith. Mae dulliau haniaethol yn ddulliau y mae'n rhaid i bob dosbarth sy'n etifeddu o'r dosbarth haniaethol eu gweithredu.
  • Gellir rhoi addasydd mynediad terfynol i ddosbarthiadau, dulliau a phriodweddau. Fe'i defnyddir i wahardd dosbarth neu ddull rhag cael ei ymestyn neu ei ddiystyru.

Enghreifftiau

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();

Yn yr enghraifft uchod, rydym yn adeiladu a haniaethol dosbarth o'r enw “Beic” sydd â swyddogaeth haniaethol o'r enw “drive()”. Nesaf rydym yn adeiladu dosbarth newydd o'r enw “Heddlu,” sydd yn ymestyn y dosbarth “Beic” ac yn gweithredu'r swyddogaeth “drive()”. Rydym yn defnyddio'r dosbarth “Heddlu” yn lle hynny oherwydd ni allwn adeiladu gwrthrych o'r dosbarth haniaethol.

Yn olaf, mae addaswyr mynediad yn rhan bwysig o OOP yn PHP ac fe'u defnyddir i gyfyngu ar gwmpas newidynnau neu swyddogaethau dosbarth. Gall deall a defnyddio addaswyr mynediad yn effeithiol eich helpu i ddatblygu cod mwy diogel a chynaladwy.

Holi ac Ateb

C: Beth yw addaswyr mynediad?
A: Mae addaswyr mynediad yn diffinio cwmpas newidynnau neu ddulliau dosbarth, yn ogystal â ble y gellir eu cyrchu. Yn PHP, mae addaswyr mynediad yn cael eu dosbarthu fel rhai cyhoeddus, preifat neu warchodedig.

C: Beth yw'r addasydd mynediad rhagosodedig?
A: Mae addasydd mynediad rhagosodedig PHP yn gyhoeddus. Os na fyddwch yn darparu'r addasydd mynediad wrth greu dull neu briodoledd mewn dosbarth PHP, caiff ei osod yn gyhoeddus yn ddiofyn.

C: Beth yw'r gwahaniaeth rhwng addaswyr mynediad preifat a gwarchodedig?
A: Efallai mai dim ond o fewn y dosbarth a’i cynhyrchodd y bydd dull neu briodoledd preifat yn hygyrch, ond gellir cyrchu dull neu briodoledd gwarchodedig o fewn y dosbarth a’i creodd yn ogystal â dosbarthiadau a etifeddodd o’r dosbarth hwnnw.

C: A allwch chi roi enghraifft o ddefnyddio addasydd mynediad haniaethol yn PHP?

abstract class Bike {
    private $maxSpeed = 80;
    abstract public function drive();
}
class Police extends Bike {
    public function drive() {
        return "Driving out of speed limit.";
    }
}

Yn yr enghraifft uchod, rydym yn adeiladu dosbarth haniaethol o'r enw “Beic” sydd â swyddogaeth haniaethol o'r enw “drive()”. Nesaf rydyn ni'n adeiladu dosbarth newydd o'r enw “Heddlu,” sy'n ymestyn y dosbarth “Beic” ac yn gweithredu'r swyddogaeth “drive()”. Rydym yn defnyddio'r dosbarth “Heddlu” yn lle hynny oherwydd ni allwn adeiladu gwrthrych o'r dosbarth haniaethol.

C: Sut mae'r addasydd mynediad terfynol yn gweithio?
A: Gellir cymhwyso'r addasydd mynediad terfynol i ddosbarthiadau, dulliau ac eiddo. Fe'i defnyddir i atal dosbarth rhag cael ei ymestyn neu ddull rhag cael ei ddiystyru. Mae hyn yn golygu na ellir ymestyn unrhyw ddosbarth sy'n etifeddu o ddosbarth terfynol, ac ni ellir diystyru unrhyw ddull a nodir yn derfynol.

Ymarferion:

  1. Beth yw'r addasydd mynediad rhagosodedig yn PHP?
  2. Beth yw'r gwahaniaeth rhwng addaswyr mynediad preifat a gwarchodedig yn PHP?
  3. Rhowch enghraifft o ddefnyddio addasydd mynediad haniaethol yn PHP.
  4. Sut mae'r addasydd mynediad terfynol yn gweithio?
  5. Allwch chi greu gwrthrych o ddosbarth haniaethol? Pam neu pam lai?
  6. Allwch chi ddiystyru dull terfynol mewn dosbarth plentyn? Pam neu pam lai?
  7. Allwch chi aseinio gwerth i briodoledd preifat y tu allan i'r dosbarth y mae wedi'i greu ynddo? Pam neu pam lai?
  8. A ellir cyrchu dull gwarchodedig y tu allan i'r dosbarth y'i crëwyd ynddo? Pam neu pam lai?

Atebion:

  1. Mae'r addasydd mynediad rhagosodedig yn PHP yn gyhoeddus.
  2. Dim ond o fewn y dosbarth y mae wedi'i greu y gellir cyrchu dull neu briodoledd preifat yn PHP, tra gellir cyrchu dull neu briodoledd gwarchodedig o fewn y dosbarth y mae wedi'i greu ynddo, yn ogystal ag mewn dosbarthiadau sy'n etifeddu o'r dosbarth hwnnw.
abstract class Bike {
    private $maxSpeed = 80;
    abstract public function drive();
}
class Police extends Bike {
    public function drive() {
        return "Driving out of speed limit.";
    }
}

4. Gellir cymhwyso'r addasydd mynediad terfynol i ddosbarthiadau, dulliau ac eiddo. Fe'i defnyddir i atal dosbarth rhag cael ei ymestyn neu ddull rhag cael ei ddiystyru.
5. Na, ni allwn greu gwrthrych o ddosbarth haniaethol oherwydd bod dosbarth haniaethol yn gweithredu fel glasbrint ar gyfer dosbarthiadau eraill ac nid oes ganddo adeiladwr i greu gwrthrych.
6. Na, ni allwn ddiystyru dull terfynol mewn dosbarth plentyn gan ei fod wedi'i nodi'n derfynol ac ni ellir ei ddiystyru.
7. Na, ni allwn roi gwerth i briodoledd preifat y tu allan i'r dosbarth a'i cynhyrchodd gan mai dim ond o fewn y dosbarth y mae'r briodwedd ar gael.
8. Na, ni all dull gwarchodedig fod yn hygyrch y tu allan i'r dosbarth a'i creodd, ond gellir ei gyrchu gan ddosbarthiadau sy'n deillio o'r dosbarth hwnnw.

Adeiladwyr a Dinistrwyr yn PHP
Etifeddiaeth yn PHP OOP
cau

Cadwch y wybodaeth ddiweddaraf am PHP!

Nid ydym yn sbam!

en English
X
Sgroliwch i'r brig