PDA

View Full Version : دسترسی به متدها کلاس فرزند



masiha68
سه شنبه 31 تیر 1393, 11:43 صبح
سلام
چطوری میشه به متد های کلاس فرزند توی کلاس پدر دسترسی داشته باشیم .
و یه سوال هم اینکه راهی هست از پراپرتی توی کلاس به عنوان متد استفاده کرد ؟:متعجب:

masiha68
سه شنبه 31 تیر 1393, 11:49 صبح
یه سوال دیگه هم اضافه کنم ... اینکه وقتی دو کلاس نسب به یک کلاس حالت فرزندی دارن اون دو کلاس نسبت به هم چه حالتی دارن ... ایا میشه متدهای همدیگه رو فراخوانی کنن !!:متعجب::متعجب: مثلا کلاس a و b از کلاس c مشتق شدن . حالا بین متدهای a و b هیچ رابطه ای وجود داره !!!

2undercover
سه شنبه 31 تیر 1393, 12:04 عصر
سلام
چطوری میشه به متد های کلاس فرزند توی کلاس پدر دسترسی داشته باشیم .
و یه سوال هم اینکه راهی هست از پراپرتی توی کلاس به عنوان متد استفاده کرد ؟:متعجب:

یه سوال دیگه هم اضافه کنم ... اینکه وقتی دو کلاس نسب به یک کلاس حالت فرزندی دارن اون دو کلاس نسبت به هم چه حالتی دارن ... ایا میشه متدهای همدیگه رو فراخوانی کنن !! مثلا کلاس a و b از کلاس c مشتق شدن . حالا بین متدهای a و b هیچ رابطه ای وجود داره !!!


1.


parent::methodName();


2.


$return = call_user_func_array($this->propertyAsACallback, $params);


3. خیر رابطه ای وجود نداره اما می تونید رابطه برقرار بکنید.

masiha68
سه شنبه 31 تیر 1393, 12:08 عصر
parent::methodName(); اینکه متدهای کلاس پدر رو توی فرزند فراخوانی می کنه . من میخوام به متدهای کلاس فرزند توی کلاس پدر دسترسی داشته باشم !!!

چجوری میشه رابطه برقرار کرد ؟؟؟!

2undercover
سه شنبه 31 تیر 1393, 13:23 عصر
یعنی می خواید به متد های کلاس هایی که ازش مشتق میشن دسترسی داشته باشه. یعنی چیزی به شکل زیر؟



class A {
public function parentMethod() {
echo 'I`m Parent...';
}
}
class B extends A {
public function childMethod() {
echo 'I`m child...';
}
}

$parent = new A;
$child = new B;
$parent->childMethod();

Veteran
سه شنبه 31 تیر 1393, 13:48 عصر
بله منظورشون همینه
من اینو نوشتم،کارو راه میندازه :لبخند:


<?php
class parentC {
private $_Child;
public function __construct ( $Child = null ) {
$this->_Child = $Child;
}
public function __call ( $method, $args = NULL ) {
if(method_exists($this->_Child, $method)) {
count($args) == 0 ? call_user_method($method, $this->_Child, $args) : call_user_method_array($method, $this->_Child, $args);
}
}
}
class childC extends parentC {
public function childFirstMethod () {
echo "I'm child";
}
public function childSecondMethod ( $first, $second ) {
echo "{$first}:{$second}";
}
}
$obj = new parentC(new childC());
$obj->childFirstMethod();

$obj->childSecondMethod('1', '2');

masiha68
سه شنبه 31 تیر 1393, 18:32 عصر
بله منظورشون همینه
من اینو نوشتم،کارو راه میندازه :لبخند:


<?php
class parentC {
private $_Child;
public function __construct ( $Child = null ) {
$this->_Child = $Child;
}
public function __call ( $method, $args = NULL ) {
if(method_exists($this->_Child, $method)) {
count($args) == 0 ? call_user_method($method, $this->_Child, $args) : call_user_method_array($method, $this->_Child, $args);
}
}
}
class childC extends parentC {
public function childFirstMethod () {
echo "I'm child";
}
public function childSecondMethod ( $first, $second ) {
echo "{$first}:{$second}";
}
}
$obj = new parentC(new childC());
$obj->childFirstMethod();

$obj->childSecondMethod('1', '2');


م
میشه توضیح بدی چیکار کردی ؟؟ زبون روزه و دم افطار و php ....
البته من میخوام توی کاس پدر به متدهای فرزند دسترسی داشته باشم .

Veteran
سه شنبه 31 تیر 1393, 19:37 عصر
کاره خااصی نکردم! ی کلاس پدر داریم که ی پراپرتی داره برای نگهداری یک نمونه از ابجکت فرزند.
که توی سازنده کلاس پدر مقدار دهی میشه.
حالا دوحالت به وجود میاد
اگر ما یک متدی رو صدا زدیم و اون متد توی کلاس پدر وجود داشت که هیچی، متد کلاس پدر صدا زده میشه.
اما اگر وجود نداشت، در خواست هدایت میشه به سمته متد جادویی call__
که دوتا پارامتر داره.اولی اسم متد صدا زده شده و دومی پارامتر های اون.
خب ما توی این متد چک میکنیم اگر همچین متدی توی کلاس فرزند وجود داشته باشه
اونو صدا بزنه! و اگر پارامتری هم داشت، اونو هم بهش تحویل بده

rezaonline.net
سه شنبه 31 تیر 1393, 22:18 عصر
من میخوام به متدهای کلاس فرزند توی کلاس پدر دسترسی داشته باشم !!!

چجوری میشه رابطه برقرار کرد ؟؟؟!
دلیل این کارتون چیه ؟
شاید راه حل بهتری باشه .

farzadyazdan
سه شنبه 31 تیر 1393, 22:28 عصر
کاره خااصی نکردم! ی کلاس پدر داریم که ی پراپرتی داره برای نگهداری یک نمونه از ابجکت فرزند.
که توی سازنده کلاس پدر مقدار دهی میشه.
حالا دوحالت به وجود میاد
اگر ما یک متدی رو صدا زدیم و اون متد توی کلاس پدر وجود داشت که هیچی، متد کلاس پدر صدا زده میشه.
اما اگر وجود نداشت، در خواست هدایت میشه به سمته متد جادویی call__
که دوتا پارامتر داره.اولی اسم متد صدا زده شده و دومی پارامتر های اون.
خب ما توی این متد چک میکنیم اگر همچین متدی توی کلاس فرزند وجود داشته باشه
اونو صدا بزنه! و اگر پارامتری هم داشت، اونو هم بهش تحویل بده

در تکمیل گفته های دوستمون، به این تکنیک میگن dependency injection
پیشنهاد میکنم این مقاله رو بخونین:
http://fabien.potencier.org/article/11/what-is-dependency-injection

masiha68
سه شنبه 31 تیر 1393, 23:21 عصر
دلیل این کارتون چیه ؟
شاید راه حل بهتری باشه .
دارم روی یه فریم ورک کار میکنم (دست و پا شکسته ) و میخوام توی کنترلرهای مشتق شده یه تابع رو فراخوانی کنم که توی کنترلر اصلی اجرا بشه ولی نمی خوام از __construct() استفاده کنم .
چیزی شبیه تابعد init() توی یی

farzadyazdan
چهارشنبه 01 مرداد 1393, 00:16 صبح
دارم روی یه فریم ورک کار میکنم (دست و پا شکسته ) و میخوام توی کنترلرهای مشتق شده یه تابع رو فراخوانی کنم که توی کنترلر اصلی اجرا بشه ولی نمی خوام از __construct() استفاده کنم .
چیزی شبیه تابعد init() توی یی

من دقیقا نمیدونم چکار میخواهید کنید و با Yii هم زیاد کار نکردم اما اگر جای شما بودم از class autoloader استفاده می کردم