PHP-യിൽ മോഡിഫയറുകൾ ആക്സസ് ചെയ്യുക

PHP-യിലെ കൺസ്ട്രക്‌റ്ററുകളും ഡിസ്ട്രക്‌റ്ററുകളും
PHP OOP-യിലെ അനന്തരാവകാശം

PHP-യിൽ, ഒബ്ജക്റ്റ് ഓറിയന്റഡ് പ്രോഗ്രാമിംഗിന്റെ (OOP) ഒരു പ്രധാന ഭാഗമാണ് ആക്സസ് മോഡിഫയറുകൾ. ക്ലാസ് വേരിയബിളുകളുടെയോ രീതികളുടെയോ വ്യാപ്തിയും അവ എങ്ങനെ ആക്സസ് ചെയ്യാമെന്നും അവർ വ്യക്തമാക്കുന്നു. ഈ പോസ്റ്റിൽ, പി‌എച്ച്‌പിയിലെ വിവിധ തരം ആക്‌സസ് മോഡിഫയറുകൾ ഞങ്ങൾ നോക്കുകയും അവ എങ്ങനെ ഉപയോഗിക്കാമെന്നതിന്റെ ഉദാഹരണങ്ങൾ വാഗ്ദാനം ചെയ്യുകയും ചെയ്യും.

PHP-യിൽ മോഡിഫയർ തരങ്ങൾ ആക്സസ് ചെയ്യുക

PHP-യിൽ, ആക്സസ് മോഡിഫയറുകൾ പൊതു, സ്വകാര്യ, അല്ലെങ്കിൽ പരിരക്ഷിതമായി തരംതിരിച്ചിരിക്കുന്നു.

  • പൊതുവായത്: പൊതുവായി സജ്ജീകരിച്ചിരിക്കുന്ന ഒരു രീതി അല്ലെങ്കിൽ ആട്രിബ്യൂട്ട് എല്ലായിടത്തും ആക്സസ് ചെയ്യാൻ കഴിയും. ഇതാണ് PHP-യിലെ ഡിഫോൾട്ട് ആക്സസ് മോഡിഫയർ.
  • സ്വകാര്യം: സ്വകാര്യമായി സജ്ജീകരിച്ചിരിക്കുന്ന ഒരു രീതി അല്ലെങ്കിൽ ആട്രിബ്യൂട്ട് അത് സൃഷ്‌ടിച്ച ക്ലാസിൽ മാത്രമേ ആക്‌സസ് ചെയ്യാൻ കഴിയൂ.
  • പരിരക്ഷിതം: പരിരക്ഷിതമായി സജ്ജീകരിച്ചിരിക്കുന്ന ഒരു രീതി അല്ലെങ്കിൽ ആട്രിബ്യൂട്ട് അത് സൃഷ്‌ടിച്ച ക്ലാസിനുള്ളിലും ആ ക്ലാസിൽ നിന്ന് പാരമ്പര്യമായി ലഭിക്കുന്ന ക്ലാസുകളിലും ആക്‌സസ് ചെയ്യാൻ കഴിയും.

ഉദാഹരണങ്ങൾ

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

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

മുകളിലെ ഉദാഹരണത്തിൽ, മൂന്ന് ആട്രിബ്യൂട്ടുകളുള്ള ഒരു "വ്യക്തി" ക്ലാസ് ഞങ്ങൾ നിർവ്വചിക്കുന്നു, ഓരോന്നിനും പ്രത്യേക ആക്സസ് മോഡിഫയർ ഉണ്ട്. "പേര്" ആട്രിബ്യൂട്ട് പൊതുവായതാണ്, "പ്രായം" ആട്രിബ്യൂട്ട് പരിരക്ഷിച്ചിരിക്കുന്നു, "ഉയരം" ആട്രിബ്യൂട്ട് സ്വകാര്യമാണ്. ക്ലാസ്സിന് പുറത്തുള്ള "പേര്" ആട്രിബ്യൂട്ട് ആക്‌സസ് ചെയ്യാൻ ശ്രമിക്കുമ്പോൾ അതിന് ഒരു മൂല്യം ചേർക്കുമ്പോൾ, എല്ലാം നന്നായി പ്രവർത്തിക്കുന്നു. എന്നിരുന്നാലും, ക്ലാസിന് പുറത്തുള്ള "പ്രായം", "ഉയരം" എന്നീ സവിശേഷതകളിലേക്ക് മൂല്യങ്ങൾ ചേർക്കാൻ ശ്രമിക്കുന്നത് മാരകമായ പിശകിൽ കലാശിക്കുന്നു.

പൊതു, സ്വകാര്യ, സംരക്ഷിത രീതികൾ

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

മുകളിലുള്ള ഉദാഹരണത്തിൽ, ഞങ്ങൾ മൂന്ന് രീതികളുള്ള ഒരു "വ്യക്തി" ക്ലാസ് നിർമ്മിക്കുന്നു, ഓരോന്നിനും പ്രത്യേക ആക്സസ് മോഡിഫയർ. “സെറ്റ് നെയിം” രീതി പൊതുവായതാണ്, “സെറ്റ് ഏജ്” രീതി പരിരക്ഷിച്ചിരിക്കുന്നു, “സെറ്റ് ഉയരം” രീതി സ്വകാര്യമാണ്. ക്ലാസ്സിന് പുറത്ത് നിന്ന് "സെറ്റ് നെയിം" ഫംഗ്‌ഷൻ അഭ്യർത്ഥിക്കാൻ ശ്രമിക്കുമ്പോൾ, അത് നന്നായി പ്രവർത്തിക്കുന്നു. ക്ലാസിന് പുറത്ത് നിന്ന് "സെറ്റ് ഏജ്", "സെറ്റ് ഹൈറ്റ്" രീതികൾ വിളിക്കാൻ ശ്രമിക്കുമ്പോൾ, നമുക്ക് ഒരു മാരകമായ പിശക് ലഭിക്കും.

വിപുലമായ ആക്‌സസ് മോഡിഫയറുകൾ: അമൂർത്തവും അവസാനവും

സാധാരണ ആക്‌സസ് മോഡിഫയറുകൾക്ക് പുറമേ "അമൂർത്തം", "ഫൈനൽ" എന്നീ പേരുകളിൽ 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();

മുകളിലുള്ള ഉദാഹരണത്തിൽ, ഞങ്ങൾ ഒരു നിർമ്മിക്കുന്നു വേര്പെട്ടുനില്ക്കുന്ന "ഡ്രൈവ്()" എന്ന അമൂർത്തമായ ഫംഗ്‌ഷനുള്ള "ബൈക്ക്" എന്ന് പേരുള്ള ക്ലാസ്. ഞങ്ങൾ അടുത്തതായി "പോലീസ്" എന്ന പേരിൽ ഒരു പുതിയ ക്ലാസ് നിർമ്മിക്കുന്നു വിപുലീകരിക്കുന്നു "ബൈക്ക്" ക്ലാസ് കൂടാതെ "ഡ്രൈവ് ()" ഫംഗ്ഷൻ നടപ്പിലാക്കുന്നു. അബ്‌സ്‌ട്രാക്റ്റ് ക്ലാസിന്റെ ഒരു ഒബ്‌ജക്റ്റ് നിർമ്മിക്കാൻ ഞങ്ങൾക്ക് കഴിയാത്തതിനാൽ ഞങ്ങൾ പകരം "പോലീസ്" ക്ലാസ് ഉപയോഗിക്കുന്നു.

അവസാനമായി, ആക്‌സസ് മോഡിഫയറുകൾ PHP-യിലെ OOP-യുടെ ഒരു പ്രധാന ഭാഗമാണ്, അവ ക്ലാസ് വേരിയബിളുകളുടെയോ ഫംഗ്‌ഷനുകളുടെയോ പരിധി പരിമിതപ്പെടുത്താൻ ഉപയോഗിക്കുന്നു. ആക്സസ് മോഡിഫയറുകൾ മനസ്സിലാക്കുകയും ഫലപ്രദമായി ഉപയോഗിക്കുകയും ചെയ്യുന്നത് കൂടുതൽ സുരക്ഷിതവും പരിപാലിക്കാവുന്നതുമായ കോഡ് വികസിപ്പിക്കാൻ നിങ്ങളെ സഹായിച്ചേക്കാം.

ചോദ്യോത്തരങ്ങൾ

ചോദ്യം: ആക്സസ് മോഡിഫയറുകൾ എന്തൊക്കെയാണ്?
A: ആക്‌സസ് മോഡിഫയറുകൾ ക്ലാസ് വേരിയബിളുകളുടെയോ രീതികളുടെയോ വ്യാപ്തിയും അവ എവിടെ ആക്‌സസ് ചെയ്യാമെന്നും നിർവചിക്കുന്നു. PHP-യിൽ, ആക്സസ് മോഡിഫയറുകൾ പൊതു, സ്വകാര്യ, അല്ലെങ്കിൽ പരിരക്ഷിതമായി തരംതിരിച്ചിരിക്കുന്നു.

ചോദ്യം: ഡിഫോൾട്ട് ആക്സസ് മോഡിഫയർ എന്താണ്?
A: PHP-യുടെ ഡിഫോൾട്ട് ആക്‌സസ് മോഡിഫയർ പൊതുവായതാണ്. ഒരു PHP ക്ലാസിൽ ഒരു രീതി അല്ലെങ്കിൽ ആട്രിബ്യൂട്ട് സൃഷ്‌ടിക്കുമ്പോൾ നിങ്ങൾ ആക്‌സസ് മോഡിഫയർ നൽകുന്നില്ലെങ്കിൽ, അത് ഡിഫോൾട്ടായി പൊതുവായി സജ്ജീകരിച്ചിരിക്കുന്നു.

ചോദ്യം: സ്വകാര്യവും പരിരക്ഷിതവുമായ ആക്‌സസ് മോഡിഫയറുകൾ തമ്മിലുള്ള വ്യത്യാസം എന്താണ്?
A: ഒരു സ്വകാര്യ രീതി അല്ലെങ്കിൽ ആട്രിബ്യൂട്ട് അത് സൃഷ്‌ടിച്ച ക്ലാസിനുള്ളിൽ മാത്രമേ ആക്‌സസ് ചെയ്യാൻ കഴിയൂ, എന്നാൽ അത് സൃഷ്‌ടിച്ച ക്ലാസിലും ആ ക്ലാസിൽ നിന്ന് പാരമ്പര്യമായി ലഭിച്ച ക്ലാസുകളിലും ഒരു പരിരക്ഷിത രീതി അല്ലെങ്കിൽ ആട്രിബ്യൂട്ട് ആക്‌സസ് ചെയ്യാൻ കഴിയും.

ചോദ്യം: PHP-യിൽ ഒരു അബ്സ്ട്രാക്റ്റ് ആക്സസ് മോഡിഫയർ ഉപയോഗിക്കുന്നതിന്റെ ഒരു ഉദാഹരണം നൽകാമോ?

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

മുകളിലുള്ള ഉദാഹരണത്തിൽ, "ഡ്രൈവ്()" എന്ന് വിളിക്കുന്ന ഒരു അമൂർത്ത ഫംഗ്‌ഷൻ ഉള്ള "ബൈക്ക്" എന്ന പേരിലുള്ള ഒരു അബ്‌സ്‌ട്രാക്റ്റ് ക്ലാസ് ഞങ്ങൾ നിർമ്മിക്കുന്നു. ഞങ്ങൾ അടുത്തതായി "പോലീസ്" എന്ന പേരിൽ ഒരു പുതിയ ക്ലാസ് നിർമ്മിക്കുന്നു, അത് "ബൈക്ക്" ക്ലാസ് വിപുലീകരിക്കുകയും "ഡ്രൈവ്()" ഫംഗ്ഷൻ നടപ്പിലാക്കുകയും ചെയ്യുന്നു. അബ്‌സ്‌ട്രാക്റ്റ് ക്ലാസിന്റെ ഒരു ഒബ്‌ജക്റ്റ് നിർമ്മിക്കാൻ ഞങ്ങൾക്ക് കഴിയാത്തതിനാൽ ഞങ്ങൾ പകരം "പോലീസ്" ക്ലാസ് ഉപയോഗിക്കുന്നു.

ചോദ്യം: ഫൈനൽ ആക്സസ് മോഡിഫയർ എങ്ങനെയാണ് പ്രവർത്തിക്കുന്നത്?
A: അവസാന ആക്സസ് മോഡിഫയർ ക്ലാസുകൾ, രീതികൾ, പ്രോപ്പർട്ടികൾ എന്നിവയിൽ പ്രയോഗിക്കാവുന്നതാണ്. ഒരു ക്ലാസ് വിപുലീകരിക്കുന്നതിൽ നിന്നും അല്ലെങ്കിൽ ഒരു രീതി അസാധുവാക്കുന്നതിൽ നിന്നും തടയാൻ ഇത് ഉപയോഗിക്കുന്നു. ഇതിനർത്ഥം അവസാന ക്ലാസിൽ നിന്ന് പാരമ്പര്യമായി ലഭിക്കുന്ന ഏത് ക്ലാസും വിപുലീകരിക്കാൻ കഴിയില്ല, അവസാനമായി അടയാളപ്പെടുത്തിയ ഏത് രീതിയും അസാധുവാക്കാൻ കഴിയില്ല.

വ്യായാമങ്ങൾ:

  1. PHP-യിലെ ഡിഫോൾട്ട് ആക്സസ് മോഡിഫയർ എന്താണ്?
  2. PHP-യിലെ സ്വകാര്യവും പരിരക്ഷിതവുമായ ആക്‌സസ് മോഡിഫയറുകൾ തമ്മിലുള്ള വ്യത്യാസം എന്താണ്?
  3. PHP-യിൽ ഒരു അബ്സ്ട്രാക്റ്റ് ആക്സസ് മോഡിഫയർ ഉപയോഗിക്കുന്നതിന്റെ ഒരു ഉദാഹരണം നൽകുക.
  4. അന്തിമ ആക്‌സസ് മോഡിഫയർ എങ്ങനെയാണ് പ്രവർത്തിക്കുന്നത്?
  5. നിങ്ങൾക്ക് ഒരു അബ്സ്ട്രാക്റ്റ് ക്ലാസിന്റെ ഒരു ഒബ്ജക്റ്റ് സൃഷ്ടിക്കാൻ കഴിയുമോ? എന്തുകൊണ്ട് അല്ലെങ്കിൽ എന്തുകൊണ്ട്?
  6. ഒരു ചൈൽഡ് ക്ലാസ്സിലെ അവസാന രീതി നിങ്ങൾക്ക് അസാധുവാക്കാൻ കഴിയുമോ? എന്തുകൊണ്ട് അല്ലെങ്കിൽ എന്തുകൊണ്ട്?
  7. ഒരു സ്വകാര്യ ആട്രിബ്യൂട്ട് സൃഷ്‌ടിച്ച ക്ലാസിന് പുറത്തുള്ള ഒരു മൂല്യം നിങ്ങൾക്ക് നൽകാമോ? എന്തുകൊണ്ട് അല്ലെങ്കിൽ എന്തുകൊണ്ട്?
  8. ഒരു സംരക്ഷിത രീതി അത് സൃഷ്ടിച്ച ക്ലാസിന് പുറത്ത് ആക്സസ് ചെയ്യാൻ കഴിയുമോ? എന്തുകൊണ്ട് അല്ലെങ്കിൽ എന്തുകൊണ്ട്?

ഉത്തരങ്ങൾ:

  1. PHP-യിലെ ഡിഫോൾട്ട് ആക്സസ് മോഡിഫയർ പൊതുവായതാണ്.
  2. PHP-യിലെ ഒരു സ്വകാര്യ രീതി അല്ലെങ്കിൽ ആട്രിബ്യൂട്ട് അത് സൃഷ്‌ടിച്ച ക്ലാസിനുള്ളിൽ മാത്രമേ ആക്‌സസ് ചെയ്യാൻ കഴിയൂ, അതേസമയം ഒരു സംരക്ഷിത രീതി അല്ലെങ്കിൽ ആട്രിബ്യൂട്ട് സൃഷ്‌ടിച്ച ക്ലാസിനുള്ളിലും ആ ക്ലാസിൽ നിന്ന് പാരമ്പര്യമായി ലഭിക്കുന്ന ക്ലാസുകളിലും ആക്‌സസ് ചെയ്യാൻ കഴിയും.
abstract class Bike {
    private $maxSpeed = 80;
    abstract public function drive();
}
class Police extends Bike {
    public function drive() {
        return "Driving out of speed limit.";
    }
}

4. അവസാന ആക്സസ് മോഡിഫയർ ക്ലാസുകൾ, രീതികൾ, പ്രോപ്പർട്ടികൾ എന്നിവയിൽ പ്രയോഗിക്കാവുന്നതാണ്. ഒരു ക്ലാസ് വിപുലീകരിക്കുന്നതിൽ നിന്നും അല്ലെങ്കിൽ ഒരു രീതി അസാധുവാക്കുന്നതിൽ നിന്നും തടയാൻ ഇത് ഉപയോഗിക്കുന്നു.
5. ഇല്ല, ഒരു അബ്‌സ്‌ട്രാക്റ്റ് ക്ലാസ്സിന്റെ ഒരു ഒബ്‌ജക്റ്റ് സൃഷ്‌ടിക്കാനാവില്ല, കാരണം ഒരു അബ്‌സ്‌ട്രാക്റ്റ് ക്ലാസ് മറ്റ് ക്ലാസുകളുടെ ബ്ലൂപ്രിന്റ് ആയി പ്രവർത്തിക്കുന്നു, കൂടാതെ ഒരു ഒബ്‌ജക്റ്റ് സൃഷ്‌ടിക്കാൻ ഒരു കൺസ്‌ട്രക്‌റ്റർ ഇല്ല.
6. ഇല്ല, ഒരു ചൈൽഡ് ക്ലാസ്സിലെ അന്തിമ രീതിയെ നമുക്ക് അസാധുവാക്കാൻ കഴിയില്ല, കാരണം അത് അന്തിമമായി അടയാളപ്പെടുത്തിയിരിക്കുന്നതിനാൽ അത് അസാധുവാക്കാൻ കഴിയില്ല.
7. ഇല്ല, ആട്രിബ്യൂട്ട് ക്ലാസിനുള്ളിൽ മാത്രമേ ലഭ്യമാകൂ എന്നതിനാൽ അത് സൃഷ്‌ടിച്ച ക്ലാസിന് പുറത്തുള്ള ഒരു സ്വകാര്യ ആട്രിബ്യൂട്ടിന് മൂല്യം നൽകാൻ ഞങ്ങൾക്ക് കഴിയില്ല.
8. ഇല്ല, ഒരു സംരക്ഷിത രീതി അത് സൃഷ്‌ടിച്ച ക്ലാസിന് പുറത്ത് ആക്‌സസ് ചെയ്യാൻ കഴിയില്ല, എന്നാൽ ആ ക്ലാസിൽ നിന്ന് ഉരുത്തിരിഞ്ഞ ക്ലാസുകൾക്ക് അത് ആക്‌സസ് ചെയ്‌തേക്കാം.

PHP-യിലെ കൺസ്ട്രക്‌റ്ററുകളും ഡിസ്ട്രക്‌റ്ററുകളും
PHP OOP-യിലെ അനന്തരാവകാശം
en English
X
ടോപ്പ് സ്ക്രോൾ