Skip to content

Instantly share code, notes, and snippets.

@mbougarne
Last active April 15, 2020 13:55
Show Gist options
  • Select an option

  • Save mbougarne/5f6c92ac3f952ef5ca545163b2a79179 to your computer and use it in GitHub Desktop.

Select an option

Save mbougarne/5f6c92ac3f952ef5ca545163b2a79179 to your computer and use it in GitHub Desktop.
شرح بسيط على PHP OOP

السلام عليكم هاجر،

غا نحاول نشرح ليك شي حاجات قبل ما ندخللوا في الأمثلة

لي خاصك تعرفي هو أن البرمجة الكائنية في بي اتش بي ماشي بحال كيما في جافا أو سي شارب أو سي بلوس بلوس، كاين فرق كبير وهنا تعريف بسيط لكل وحدة فيهم

Java:

نقدروا نقولوا هي لغة الوحيدة لي كاملة في المفهوم ديال البرمجة الكائنية وتدعمها بطريقة شبه كاملة لمشكل لي كاين في جافا هي انه متدعمش الوراثة من عدة كائنات أو الوراثة المتعددة

  • Multi Inheritance

وباش تعوض النقص ديالها تتخدم بل

Interfaces

دور ديالها تيكون مختالف على لكلاس غا نشرحها مزيان في بي اتش بي ولكن المفهوم مشابه فيهم ب 2 وحتى في سي شارب الجافا مدعماتش الوراثة المتعدة بسباب ميبرزطوش روسهم مع لارام

RAM Management

**C#: Object Oriented Programming **

التصميم ديال البرمجة الكائنية عندهم مبني على الجافا وتا هي متدعمش الوراثة المتعددة بكل بساطة لحقاش الجافا متدعمهاش وتيعوضوها بلأنترفيسز

Interfaces

PHP:

بي اتش بي تا هي متدعمش الوراثة المتعددة ولكن الحل هنا مكانش كيما في جافا لا هنا تنتسعملوا

Traits

و

Interfaces

تتلعب دور ديال

Contracts

بمعنى ملي شي كلاس تيخدم بشي أنترفيس تيلزم عليه يدخل داك شي لي فيها كامل والفرق لي كاين بين أنتيرفيس ولكلاس -

ميمكنش لينا نديروا ليها Instantiate متيكونش عندها constructor متيكونش Body for methods i.e: public function func() {body} ملي تنبغيو نخدمو بيها تنديرو implements NOT extends

أمثلة علاش تنخدمو بلأنترفيس وكيفاش ممكن نخدمو ب تريتز هذ شي بسيط ولكن على الأقل نتمنى يخليك تفهمي شي حاجة

على بركة الله

// We are working on MyClassName.php thqt live in \Path\To\Your\Namespace\MyClassName.php
// بحال كيما في سي بلوس بلوس 
namespace Path\To\Your\Namespace;

/**
* هاكا باش تنديرو كلاس في بي اتش بي
*/
class MyClassName
{

}

 /**
* لا بغينا نزيدو
* Properties
* Methods
* Constractor
*/

class MyClassName
{
  // private / protected / public are refer to the visibility
  private $password;
  // بريفت تتخلي لحاجة تخدم بيها غا في لكلاس فين كاينة
  
  protected $email;
  // تتخلينا نخدموا بلحاجة في لكلاس لي دارت فيه ولا في لكلاس لي ورثنا منو أو الأب/بارنت يعني لي دارو ليه
  // extends
  
  public $name;
  // ممكن نستعملوها من اي كلاس
  
  // هاكا باش تنديرو لكونستراكتور
  // كونستراكتور تنديروه لكنا بغينا ندخلوا شي حاجة بار ديفو لأي كلاس
  public function __constructor()
  {
  
  }
}

/**
*
* هذا مثال ديال كلاس كامل وزدت فيه
* Type Hinting PHP 7.4
*/

class MyClassName
{
  // لي تزاد في نسخة 7.4 هما
  // string int array
  // Properties type hinting

  private string $password = '';
  protected string $email = '';
  public string $name = '';
  public int $zip = 0;
  public array $phones = [];
  
  public function __constructor(string $name, string $email, int $zip)
  {
    $this->name = $name;
    $this->email = $email;
    $this->zip = $zip;
    // $this: تتعني هذ لكلاس
  }
  
  /**
  * لحقاش باسوورد برايفت درنا هذ ميثود باش ممكن نجيبوه من أي كلاس
  */
  public function getPassword()
  {
    return $this->password;
  }
  
  /**
  * visibility is available in methods too
  */
  protected function randomPassword()
  {
    return md5(rand(1, 100) * 100);
  }
}

غا نحاول نعطيك مثال ديال أنترفيس وغا ندير مثال ديال

Repository Pattern

  // Working on UserRepositoryInterface.php that lives in \Path\To\Your\Namespace\UserRepositoryInterface.php
  
  namespace Path\To\Your\Namespace;
  
  /**
  * كل شي خاص يكون بابليك
  * All visibilities must be public
  */
  interface UserRepositoryInterface
  {
    public function getALlNames();
    public function setName();
    public function getName();
  }

تنخدمو فيها فكلاس بحال هاكا

// Working on Users.php that lives in \Path\To\Your\Namespace\Users.php

namespace Path\To\Your\Namespace;
/**
* ملي تنبغيو نزيدو شي حاجة تنديرو 
* use
* لا بغينا نسميو لحاجة بسمية أخرى تنديرو
* as
*/
use Path\To\Your\Namespace\UserRepositoryInterface as UserRepository;

class Users implements UserRepository
{
  private $name = '';
  
  public function getALlNames()
  {
    return 'All users';
  }
  
  public function setName()
  {
    $this->name = 'new name'
  }
  
  public function getName()
  {
    return $this->name;
  }
  
  /*
  * ملي تنخدمو بأنترفيس خاص ندخلو داك شي لي فيها كامل كيما هو
  * ولكن عدنا لحق نزيدو حوايج أخرين
  **/
  public function sendEmail()
  {
    return 'email sent';
  }
}

دابا غا نحاول نتكلم على

traits

بحالها بحال لكاس لفرق لوحيد لي كاين هو أن

we can note instantiate traits, we can not make $myclass = new MyTraits();

  // Working on UserTrait.php that lives in \Path\To\Your\Namespace\UserTrait.php
  
  namespace Path\To\Your\Namespace;

  trait UserTrait
  {
    public function verifyEmail()
    {
      return 'please verify email';
    }
  }
  
  // Working on Users.php thqt live in \Path\To\Your\Namespace\Users.php
  
  namespace Path\To\Your\Namespace;
  
  use Path\To\Your\Namespace\UserTrait;

  class Users
  {
    /**
    * هاكا باش تنزيدورها تنديروها وسطل لكلاس
    */
    use UserTrait;
    
    private $name = '';
    
    public function getALlNames()
    {
      return 'All users';
    }
    
    public function setName()
    {
      $this->name = 'new name'
    }
    
    public function getName()
    {
      return $this->name;
    }
    
    public function sendEmail()
    {
      /*
      * أي حاجة كاينة في تريت ممكن نخدمو بيها ب
      * $this
      **/
      return $this->verifyEmail();
    }
  }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment