PHP OOPs (Object Oriented Programming)
|PHP Object Oriented Programing System (OOPs) : एक से अधिक Data Type और Function के ग्रूप को हम Class कह सकते हैं, एक Class में हम अलग अलग तरह एक Data Type Declare कर सकते हैं और बहुत से फंक्शन बना सकते हैं , यह नए Data Type बनाने जैसा ही हैं । जब भी हम एक या एक से अधिक Basic Data Type का group जिसे हमे Class बोलते हैं , बनाते है तो उसी से फिर से कुछ चेंज कर एक नया Data Type बना सकते हैं , OOPS समझने के लिए हमे पहले निम्न Concept समझना होंगे जब यह Concept हमे समझे मे आ गये तो हम OOPS भी समझ जाएंगे ।
- PHP Class
- PHP Object
- PHP Properties (Simple, Static)
- PHP Methods (Simple, Static)
- PHP Constructor
- PHP Destructor
- PHP Inheritance
- PHP Access Modifier (Public, Private, Protected)
- PHP Abstract Class
- PHP Interface
- PHP Namespace
- PHP Traits
- PHP Encapsulation
- PHP Polymorphism
PHP Class
जब हमे एक से अधिक Datatype ओर function जिन्हे हम Method बोलते हैं, का एक Group बनाना हो तो हम Class का उपयोग करते हैं । किस तरह से class बनाई जाती हैं उसके बारे मे नीचे बताया हैं , अभी इस Class मे हमने कोई Properties ओर Method declare नहीं की हैं इसलिए इस Class को हम उपयोग नहीं ले पाएंगे ।
class Calculator
{
}
PHP Object
Class को हम Direct उपयोग नहीं कर सकते , Class का एक Object बना कर ही उपयोग कर सकते है । यहा पर हमें जो पहले Claculator calss बनाई थी उसका एक Object $calc बनाया हैं ,
$calc = new Calculator();
PHP Properties
जो भी हम Variable Declare करते हैं उन्हे जब किसी Class मे Declare किया जाता हैं तो उन्हे Properties कहा जाता हैं , आइए निम्न उदाहरण से समझते हैं । यहा पर हमने $a, ओर $b दो Properties declare की हैं । जब भी आपको किसी भी Property को Access करना हो तो -> इस Sign का उपयोग करते हैं ।
class Calculator
{
public $a, $b;
}
$calc = new Calculator();
$calc->a = 10;
$calc->b = 20;
PHP Static Properties
यदि हम किसी भी Property के पहले static keyword का उपयोग करते हैं तो हम उस Class को बिना Object बनाए ही उपयोग कर सकते हैं । परंतु जब हम किसी भी Class की Property को -> इस Symbol से access करते थे उसे static मे :: इस symbol से उपयोग करेंगे , कभी भी static keyword का उपयोग करते हैं तो हम object नहीं बनाते हैं ।
class Calculator
{
public static $a, $b;
}
Calculator::$a = 20;
हमारे अन्य ARTICLE
- MySQL Aggregate Function
- MySQL Stored Procedures
- MySQL Trigger (Before/After)
- PHP Form Validations, Required, Filter
- PHP MySQL Connection
- Dropdown Retrieve from MySQL
- Learn C (Single Page Summary)
- Arduino Guide 2021 (Hindi)
- कीबोर्ड शॉर्टकट्स
PHP Method
जब भी हमे किसी भी Class मे कोई Function बनाते हैं तो उसे Method कहा जाता हैं । Method मे हम Argument Pass कर सकते हैं ओर Value Return भी ले सकते हैं ।
class Calculator
{
public $a, $b;
function GetValue()
{
return $this->a;
}
}
$calc = new Calculator();
$calc->a = 10;
echo $calc->GetValue();
PHP Static Method
जैसा की हमने देखे की Static Property मे हमे बिना Object बनाए ही class को उपयोग कर सकते थे उसी प्रकार यदि हमे कोई Method को बिना Class बनाए उपयोग करना हैं तो हम Static Method का उपयोग करते हैं ।
class Calculator
{
static function GetStatic()
{
return "Hello";
}
}
echo Calculator::GetStatic(); //Return Hello
PHP Constructor
Constructor एक Special Type की Method ही हैं, इस Method का नाम हमे __construct रखना होता हैं । ऐसा करना से जब हमारे द्वार Class से Object Declare किये जाते हैं उसी समय यह Method Call हो जाती हैं। इसी कारण से इन्हे Constructor कहा जाता हैं। इसे हमे अलग से Call नहीं करना होती हैं ।
class Calculator
{
public $a, $b;
function __construct($msg)
{
echo "Hello ". $msg;
}
}
$calc = new Calculator("Sandip");
Output
PHP Destructor
Destructor भी एक Special Type की Method ही हैं, इस Method का नाम हमे __destruct रखना होता हैं । यह Method जब php page का Execution end होता हैं तब यह स्वतः ही Call हो जाती हैं । जब भी हमे ओर कार्य Page के अंत मे करना हो तो वह Statement हम __destruct() method मे लिखे सकते हैं । जैसे की हम यदि MySQL Connection की कोई Class बनाते हैं ओर हम अंत मे Connection Close करना भूल जाते हैं तो यदि हम __destruct() Method मे Connection Close करे तो हमे अलग से Connection Close करने की आवश्यकता नहीं होगी ।
class Calculator
{
public $a, $b;
function __construct($msg)
{
echo "Hello ". $msg;
}
function __destruct()
{
echo "<br>Bye Bye ";
}
}
$calc = new Calculator("Sandip");
Output
PHP Class Inheritance
जब हम एक Class बना कर उस Class से एक और Class बना लेते हैं तो उसे ही Inheritance कहा जाता है। ऐसा हम बहुत बार कर सकते हैं। जो नयी Class बनती हैं उसमे जितने भी Attribute और Method Protect और Public हैं सभी Visible होते हैं और हम साथ में कुछ नये Attribute और Method बना भी सकते है।
class Calculator
{
public $a, $b;
function GetValue()
{
return $this->a;
}
}
class StandardCalc extends Calculator
{
function SetValue($val)
{
$this->a = $val;
}
}
$calc = new StandardCalc();
$calc->SetValue(20);
echo $calc->GetValue(); //Print 20
- Multilevel Inheritance : जैसा की हमें नाम से ही समझ में आ रहा हैं की यहाँ पर एक से अधिक लेवल हैं जैस की Class A से Inherit कर Class B बनायीं हैं और B से Inherit कर Class C बनायीं हैं और C से Inherit कर Class D बनायीं हैं इस तरह के Inheritance को Multilevel Inheritance कहाँ जाता हैं।
class ClassA
{
}
class ClassB extends ClassA
{
}
class ClassC extends ClassB
{
}
class ClassD extends ClassC
{
}
Multiple Inheritance : PHP Multiple Inheritance को support नहीं करता हैं , इसके लिए आगे आपको Interface के बारे मे बताएंगे ।
PHP Access Modifier (Public, Private, Protected)
Class में जो हम Property और Method का उपयोग करते हैं उनको भी हमें Secure करने के लिए उनके Access Specifier Set कर सकते हैं यानि की जब हम इस Class का कोई object बनाये तो उस Object का उपयोग करते समय यदि हम कोई Attribute या Method Hide करना चाहे तो Hide कर सकते हैं , यहाँ पर Hide से मतलब यह हैं की Object से फिर Hide किये हुए Attribute और Method का उपयोग नहीं कर सकते हैं, इन्हे भी 3 भागो में बांटा गया हैं।
- Public : यदि हम Attribute को सभी जगह पर Access करने के Rights देना चाहते हैं तो हम उसे Public Access देते हैं जिससे यह Method और Attribute सभी जगह पर Visible और Accessible होते हैं।
- Private : यदि हम Attribute को केवल और केवल जिस Class में Define हैं वही पर उपयोग करना चाहते हैं तो उसे Private Access Control देते हैं ताकि वह उस Class के बाहर Access नहीं होती हैं। यदि हम किसी भी Attribute और Method को Private कर देते हैं तो वह Secure हो जाता हैं और Class के बाहर Visible भी नहीं रहता हैं।
- Protected : यदि हम किसी भी Attribute को Protected करते हैं तो वह Inherit हो कर Inherited Class में तो visible होता हैं लेकिन यदि Class से Object बनाया जाये तो Object में Access नहीं होता हैं, जब हम एक Class से Inherit कर दूसरी Class बनायेगें तो यह Visible रहेगा और जैसे ही उस Class से कोई Object बनाएंगे तो यह Object में invisible हो जायेगा।
class Calculator
{
public $a;
private $b;
protected $c;
function SetValue($x, $y, $z)
{
$this->a = $x;
$this->b = $y;
$this->c = $z;
}
}
class StandardCalc extends Calculator
{
function PrintValue()
{
echo "<br>A:" .$this->a;
echo "<br>B:" .$this->b; //Give Error Becoze $b is Private
echo "<br>C:" .$this->c;
}
}
$calc = new StandardCalc();
$calc->SetValue(10,20,30);
$calc->PrintValue();
$calc->a = 15;
$calc->b = 25;
$calc->c = 35; // Give Error Becoze $c is Protected
PHP Abstract Class
Abstract Class इस तरह की Class होती हैं जिनमे method को केवल Declare किया जाता हैं ओर उनको Impliment यानि की method मे Script नहीं लिखी जाती , Method को inheritance करने के बाद Impliment किया जाता हैं ।
abstract class ClassA
{
public $msg;
abstract function PrintValue();
function SetValue($val)
{
$this->msg = $val;
}
}
class ClassB extends ClassA
{
function PrintValue()
{
echo "Hello, ". $this->msg;;
}
}
$a = new ClassB;
$a->SetValue("Sandip");
$a->PrintValue();
- यदि हम किसी भी Method के पहले absctract keyword का उपयोग करते हैं तो उस Method की Body मे कुछ लिख नहीं सकते । आपने देखा होगा की abstract function PrintValue(); की Body मे कुछ नहीं लिखा हैं ।
- यदि हमें किसी class मे एक भी abstract Method बनाई हैं तो हमे क्लास को भी abstract करना होता हैं । जैसा की ClassA को किया हैं ।
- absctract class का Object नहीं बना सकते , उसको Inherit कर एक Class बना कर उसमे Impliment करना होता हैं Impliment से मतलब method की body मे Script लिखने से हैं । आपने देखा होगा ClassA से Inherit कर ClassB बनाई हैं और फिर ClassB से object बनाया हैं । और उसी मे PrintValue को Impliment किया हैं ।
PHP Interface
Interface abstract class जैसा ही होता हैं केवल इसमे हम कोई भी Property Declare नहीं कर सकते जैसा की आपने देखा होगा की Previous Example मे हमने ClassA मे $msg नाम से एक Property बनाई है ।
जो हमने अभी PHP Abstract Class का Example देखा था उसी को Modify कर हमने Interface का Example बनाया हैं ।
interface InterfaceA
{
function PrintValue();
function SetValue($val);
}
class ClassB implements InterfaceA
{
function PrintValue()
{
echo "Hello, ". $this->msg;;
}
function SetValue($val)
{
$this->msg = $val;
}
}
- Interface मे किसी भी Method को Impliment नहीं कर सकते
- Interface मे हम कोई भी Property Declare नहीं कर सकते हैं ।
PHP Namespace
जब भी हम किसी बड़े Project पर कार्य करते हैं तब हमे बहुत से कोड किस Previous App से भी Copy कर रखना होते हैं , लेकिन ऐसा करने पर कभी कभी समस्या आती हैं की एक जैसे नाम की Class दोनों ही Directory मे रहती हैं , इस तरह की Problem को Solve करने के लिए namespace का उपयोग किया जाता हैं ।
मैं आपको एक Example से समझाता हु, निम्न Example मे हमारे पास एक ही नाम की दो Class हैं ओर उसमे Method भी एक जैसी हैं । और दोनों अलग अलग File मे Save हैं, इस Example मे हम dono file को include कर दोनों की Method को Print कर देखेंगे ताकि आपको समझ आ सके की Namespace किस तरह से कार्य करता हैं ।
<?php
namespace first
{
class MyClass
{
function MyMethod()
{
echo "First Class<br>";
}
}
}
?>
<?php
namespace second
{
Class MyClass
{
function MyMethod()
{
echo "Second Class<br>";
}
}
}
?>
- निम्न Example मे हमने जो दो File मे एक ही नाम की class बनाई हैं उनको require की हैं ।
- namspace का उपयोग करने के लिए \ के साथ namespace का नाम लिखा जाता हैं जैसा की हमने \first और \second का उपयोग किया हैं ।
require ("ns_first.php");
require ("ns_second.php");
$ObjA = new \first\MyClass();
$ObjA->MyMethod();
$ObjB = new \Second\MyClass();
$ObjB->MyMethod();
Output
PHP Traits
PHP Traits एक ऐसा Concept हैं जिससे की हमे Multiple Inheritance करने की सुविधा देता हैं । आपने देखा होगा की हम कोई दो class से Inherit कर एक Class PHP मे नहीं बना सकते, यदि आप दो class से inherit कर एक class बनाना चाहते हैं तो आप Trait का उपयोग कर आसानी से Multiple Inheritance कर सकते हैं ।
trait MyTrait1
{
public $Counter1 = 0 ;
public function MyMethod1()
{
$this->Counter1 ++;
echo "Test1 Message ($this->Counter1)<br>";
}
}
trait MyTrait2
{
public $Counter2 = 0 ;
public function MyMethod2()
{
$this->Counter2 ++;
echo "Test2 Message ($this->Counter2)<br>";
}
}
class MyClass
{
use MyTrait1, MyTrait2 ;
}
$MyObj = new MyClass();
$MyObj->MyMethod1();
$MyObj->MyMethod2();
$MyObj->MyMethod1();
$MyObj->MyMethod2();
उपरोक्त Example मे हमने दो Traits लिए हैं ओर एक Class ली हैं , Class मे हमने दोनों ही Traits को Use किया हैं । ओर जब हमने Class से object बनाया तो उसमे हमने दोनों Traits की Method को Call किया हैं और साथ मे Property का भी उपयोग किया हैं ।
एक से अधिक बार Call कर हमने यह भी देख लिया की Property ठीक से कार्य करती हैं या नहीं ।
PHP Encapsulation
जब भी हम किस भी Property को Private Access Provide कर देते हैं तो वह न ही Inherit Class और न ही Object में Visible होता हैं , यानि की न ही हम उसकी Value को Get कर सकते हैं और न ही उसकी Value को Set कर सकते हैं। यदि हम Encapsulation का उपयोग करते हैं तो हम Property को तो Private ही रखते हैं लेकिन Method को Public रख कर उस Method में Attribute में Value Set करना और Value Get करने का कार्य कर सकते हैं।
हम यह कह सकते हैं की Encapsulation के द्वारा हम Private Attribute का भी उपयोग कर सकते हैं यदि Creator ने कोई Public Method बना कर Attribute को Access करने की permission दी हो तो।
यह Security के लिए एक अच्छा Concept हैं ।
<?php
class Calculator
{
private $a, $b;
function SetFirstValue($val)
{
$this->a = $val;
}
function SetSecondValue($val)
{
$this->b = $val;
}
function GetValue()
{
echo "<br>A:$this->a";
echo "<br>A:$this->b";
}
}
$Obj = new Calculator;
$Obj->SetFirstValue(10);
$Obj->SetSecondValue(20);
$Obj->GetValue();
?>
- इस Example मे हमने $a और $b को private बनाया हैं ताकि इसका उपयोग Outside Class के न हो सके ।
- $a और $b मे value set करने के लिए हमने दो Method SetFirstValue(), SetSecondValue() बनाई हैं ।
PHP Polymorphism
जब हम किसी Class को Inherit करते हैं तो उस Class की Method को हम नयी Class में उपयोग कर सकते हैं। यदि हम उस Method के नाम से एक अन्य Method बना लेते हैं तो इसे ही Polymorphism कहा जाता हैं , अन्य शब्दों में हम कह सकते हैं की एक Method का एक से अधिक Class में अलग – अलग उपयोग करना ही Polymorphism हैं वैसे भी poly का मतलब एक से अधिक होता हैं।
class ClassA
{
function PrintName($val)
{
echo "<br>Hello, ". $val;
}
}
class ClassB extends ClassA
{
function PrintName($val)
{
echo "<br>Hi, ". $val;
}
}
$ObjA = new ClassA;
$ObjA->PrintName("Sandip");
$ObjB = new ClassB;
$ObjB->PrintName("Sandip");
Output
- यहा पर हमने एक Class ClassA से Inherit कर एक और Class ClassB बनाई हैं ,
- और PrintName Method भी दोनों ही Class मे हैं ।
- अब हमने एक एक कर दोनों की Class के Object बनाये
- आप जब इनका Output देखेंगे तो पाएंगे की बाद वाली Class मे PrintName Method बाद वाली यानि की ClassB ही Execute हुआ हैं ।
- इसी Concept को Polymarphism कहते हैं ।