Thursday, August 17, 2023

PHP இல் பொருள் சார்ந்த நிரலாக்கம்-part2

 

ஃபங்க்சன் ஓவர் ரைடிங்க்

சைல்ட் கிளாசில் உள்ள ஃபங்க்சன்கள் அதே ஆர்க்க்யூமெண்ட் எண்ணிக்கையில் , அதே பெயருடன் பேரண்ட் கிளாசில் உள்ள ஃபங்க்சன்களை ஓவர் ரைட் செய்கின்றன.

பின் வரும் சான்று நிரலில் getTitle, getPrice ஆகிய ஃபங்க்சன்கள் ஓவர் ரைட் செய்யப்பட்டுள்ளன.

function getPrice() {

   echo $this->price . "<br/>";

   return $this->price;

}

  

function getTitle(){

   echo $this->title . "<br/>";

   return $this->title;

}

பப்ளிக் மெம்பர்கள்.

ஆக்சஸ் ஸ்பெசிஃபையர் குறிப்பிடா விட்டால் எல்லா ஃபங்கசன்கள் மற்றும் வேரியபிள்கள் டிஃபால்ட் ஆக பப்ளிக் ஆகும்.

அவையாவன பின் வரும் இடங்களில் ஆக்சஸ் செய்யப்படுகின்றது.

1.    அந்த கிளாசின் உள்ளே

2.    கிளாசின் வெளிப்புறம்.

3.    அந்த கிளாசின் சைல்ட் கிளாசில்.

ப்ரைவேட் மெம்பர்கள்
private என்ற ஸ்பெசிஃபையருடன் குறிப்பிடப்படும் வேரியபிள்கள்  மற்றும் ஃபங்க்சன்கள் அந்த கிளாசின் உட்புறம் மட்டுமே ஆக்சஸ் செய்ய இயலும்.

class MyClass {

   private $car = "skoda";

   $driver = "SRK";

  

   function __construct($par) {

      // Statements here run every time

      // an instance of the class

      // is created.

   }

  

   function myPublicFunction() {

      return("I'm visible!");

   }

  

   private function myPrivateFunction() {

      return("I'm  not visible outside!");

   }

}

 

ப்ரடெக்டட் மெம்பெர்கள்.

Protected என்ற ஸ்பெசிஃபையருடன் குறிப்பிடப்படும் வேரியபிள்கள் மற்றும் ஃபங்க்சன்கள் ப்ரடக்டெட் மெம்பர்கள் ஆகும்.

இவை.

அந்த கிளாசின் உள்ளே மற்றும் அதன் சைல்ட் கிளாஸ் ஆகியவற்றில் ஆக்சஸ் செய்ய இயலும்.

class MyClass {

   protected $car = "skoda";

   $driver = "SRK";

 

   function __construct($par) {

      // Statements here run every time

      // an instance of the class

      // is created.

   }

  

   function myPublicFunction() {

      return("I'm visible!");

   }

  

   protected function myPrivateFunction() {

      return("I'm  visible in child class!");

   }

}

 

இன்டெர்ஃபேஸ்.

இன்டெர்ஃபேசில் மெத்தட்களின் அறிவிப்பு மட்டுமிருக்கும். அவை ஒரு கிளாசால் இம்ப்லிமெண்ட் செய்யும் பொழுது அவற்றின் இம்ப்லிமெண்டேசன் இருக்கும்.

interface Mail {

   public function sendMail();

}

கிளாஸ் ஆனது

class Report implements Mail {

   // sendMail() Definition goes here

}

 

கான்ஸ்டண்ட்கள்.

ஒரு வேரியபிளில் உள்ள மதிப்பை மாற்ற இயலும் . ஆனால் ஒரு கான்ஸ்டண்டில் ஒரு தடவை மதிப்பிருத்தப்பட்டால் அதன் பின் மாற்ற இயலாது.

class MyClass {

   const requiredMargin = 1.7;

  

   function __construct($incomingValue) {

      // Statements here run every time

      // an instance of the class

      // is created.

   }

}

அப்ஸ்ட்ராக்ட் கிளாஸ்.

Abstract என்ற கீவேர்டுடன் குறிப்பிடப்படும் கிளாஸ்கள் அப்ஸ்ட்ராக்ட் கிளாஸ் ஆகும். இவற்றிற்கு ஆப்ஜெக்ட் உருவாக்க இயலாது. ஆனால் இந்த கிளாசை இன்ஹெரிட் செய்து அதற்கு ஆப்ஜெக்ட் உருவாக்கலாம்.

இதன் உள்ள அப்ஸ்ட்ராக்ட் மெத்தட்கள் மற்றும் இம்ப்லிமெண்டேசனுடன் கூடிய மெத்தட்கள் இரண்டுமே இருக்கலாம்.

abstract class MyAbstractClass {

   abstract function myAbstractFunction() {

   }

}

ஸ்டேட்டிக் கீவேர்டு:

ஓரு கிளாஸ் மெம்பரை static என்ற கீவேர்டுடன் குறிபிட்டால் அதை அதற்கு ஆப்ஜெக்ட் உருவாக்கமலேயே அனுக முடியும் அதாவது கிளாஸ் பெயர் கொண்டே அவற்றை ஆக்சஸ் செய்யலாம்.

<?php

   class Foo {

      public static $my_static = 'foo';

     

      public function staticValue() {

         return self::$my_static;

      }

   }

                   

   print Foo::$my_static . "\n";

   $foo = new Foo();

  

   print $foo->staticValue() . "\n";

?>              

 

ஃபைனல் கீவேர்டு

Final என்ற கீவேர்டுடன் அறிவிக்கபடும் ஃபங்க்சன்களை அதன் சைல்ட் கிளாசில் ஓவர் ரைட் செய்ய இயலாது.

ஃபைனல் கீவேர்டுடன் குறிப்பிடபடும் கிளாஸ்களை இன்ஹெரிட் செய்ய இயலாது.

<?php

 

   class BaseClass {

      public function test() {

         echo "BaseClass::test() called<br>";

      }

     

      final public function moreTesting() {

         echo "BaseClass::moreTesting() called<br>";

      }

   }

  

   class ChildClass extends BaseClass {

      public function moreTesting() {

         echo "ChildClass::moreTesting() called<br>";

      }

   }

?>

 

பேரண்ட் கன்ஸ்ட்ரக்டரை அழைத்தல்.

சைல்ட் கிளாசில் கன்ஸ்ட்ரக்டர்களை முதலில் இருந்து எழுதாமல் பேஸ் கன்ஸ்ட்ரகடரை அழைத்து விட்டு பின்பு கூடுதல் வரிகளை மட்டும் சேர்த்துக் கொள்ளலாம்.

class Name {

   var $_firstName;

   var $_lastName;

  

   function Name($first_name, $last_name) {

      $this->_firstName = $first_name;

      $this->_lastName = $last_name;

   }

  

   function toString() {

      return($this->_lastName .", " .$this->_firstName);

   }

}

class NameSub1 extends Name {

   var $_middleInitial;

  

   function NameSub1($first_name, $middle_initial, $last_name) {

      Name::Name($first_name, $last_name);

      $this->_middleInitial = $middle_initial;

   }

  

   function toString() {

      return(Name::toString() . " " . $this->_middleInitial);

   }

}

 

ஒரு கிளாசின் அதே பெயரை கன்ஸ்ட்ரக்டருக்கு வைக்கலாம். மேல் கண்ட நிரல் அதற்கு சான்றாக உள்ளது.

நன்றி

முத்து கார்த்திகேயன் ,மதுரை.

 

ads Udanz

No comments:

Post a Comment