PDA

View Full Version : کلاس



king-net
یک شنبه 02 بهمن 1390, 20:30 عصر
بر فرض سه تا کلاس دارم حالا میخوام یک کلاس دیگر تعریف کنم که باید دوتا از اون سه تا کلاس رو شامل بشه . با extends یکی رو میشه گرفت اما من دوتا رو می خوام

امیـرحسین
یک شنبه 02 بهمن 1390, 20:52 عصر
یا implementation یا extend با واسطه.
روش بهتر کنترل متدها داخل کلاس هست یعنی با توابع خود کلاس به متدها دسترسی داشته باشیم.
اگر بگی منطق چیه بهتر میشه کمک کرد...

Net So
یک شنبه 02 بهمن 1390, 20:55 عصر
دوست عزیز ببین این مثال رو :
3 تا فایل به اسم های A , B , Core داریم. این هم کد هاشون .
فایل Core رو اجرا کن .
هر جایی هم که گنگ بود بگو ، بازش کنم اون قسمت رو :قلب:

A.php


<?php
class A
{
function __construct($Registry)
{
$this->Registry = $Registry;
}

function A()
{
echo 'Function A From A' ;
echo '<br>' ;
}

function TestA()
{
$this->Registry->B->Test();
}

}
?>




B.php


<?php
class B
{
function __construct($Registry)
{
$this->Registry = $Registry;
}

function B()
{
echo 'Function B From B' ;
echo '<br>' ;
}

function Test()
{
echo 'Function Test From B' ;
echo '<br>' ;
}
}
?>


Core.php


<?php
include('A.php');
include('B.php');


Class Registry
{

private $vars = array();


public function __set($index, $value)
{
$this->vars[$index] = $value;
}

public function __get($index)
{
return $this->vars[$index];
}

}

$Registry = new Registry ;
$Registry->A = new A($Registry);
$Registry->B = new B($Registry);
$Registry->A->A();
$Registry->B->B();
$Registry->A->TestA();
$Registry->B->Test();

?>

king-net
یک شنبه 02 بهمن 1390, 21:00 عصر
من دو روش پیدا کردم به نظرتون کدوم سریع تر و بهتر هستش

اولی :


class A {
function t1(){
echo 'A';
}
}
class C {
function t2(){
echo 'C';
}
}
class D {
function t3(){
echo 'D';
}
}
class M{
private $c;

public function __construct()
{
$this->c = new D;
}

// fake "extends C" using magic function
public function __call($method, $args)
{
$this->c->$method($args[0]);
}

function test(){
echo $this->t3();
}
}
$M = new M;
echo $M->test();


دومی :


class A {
function t1(){
echo 'A';
}
}
class C {
function t2(){
echo 'C';
}
}
class D {
function t3(){
echo 'D';
}
}
class M{
var $tt ;
function test(){
$this->tt = new C;
echo $this->tt->t2();
}
}
$M = new M;
echo $M->test();