السلام عليكم هاجر،
غا نحاول نشرح ليك شي حاجات قبل ما ندخللوا في الأمثلة
لي خاصك تعرفي هو أن البرمجة الكائنية في بي اتش بي ماشي بحال كيما في جافا أو سي شارب أو سي بلوس بلوس، كاين فرق كبير وهنا تعريف بسيط لكل وحدة فيهم
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();
}
}