PDA

View Full Version : باز تعریف یک تابع در حال اجرا



sajad dp
سه شنبه 11 فروردین 1394, 14:17 عصر
سلام
قبول دارم عنوان ی خورده نامفهوم هست!
ماجرا این هست که یک اسکریپت بدقلق دستمه میخوام یک پلاگین براش بنویسم که با نصب اون فارسی بشه و با غیر فعال کردنش دوباره انگلیسی بشه.
علت این کار هم این هست که نمیخوام هسته رو دستکاری کنم چون اگر بخوام هسته رو دستکاری کنم با اومدن ی نسخه دیگه از اسکریپت دوباره کلی کار نیاز هست ک باید از اول انجام بشه.
برای همین می خوام چندتا تابعی ک نیاز به تغییر داره رو با پلاگین دوباره تعریف کنم.
مثلا در کلاس x یک تابع داریم به اسم y ( ک پابلیک هست ) ک یک کار خاص انجام میده.
حالا می خوام یک تابع y دیگه ی جوری تعریف کنم ک هرموقع صدا زده شد ب جای چیزی ک در تابع هست این تابعی ک نوشتم فراخوانی بشه. ( امیدوارم منظورم رو رسونده باشم!) ( یعنی تابع رو ی جورایی overwrite کنم)
ب نظرتون همچین کاری شدنی هست؟

amin1softco
سه شنبه 11 فروردین 1394, 14:24 عصر
به این نگاه کن شاید بدردت بخوره http://pt2.php.net/manual/en/function.register-tick-function.php

sajad dp
سه شنبه 11 فروردین 1394, 15:26 عصر
تشکر، این تابع رو چک کردم یک سری مثال هم در موردش نگاه کردم ولی اینکه چ طور استفاده کنم رو حقیقت متوجه نشدم.
شاید این مثال بهتر منظورم رو برسونه:

class BaseClass {
public function test() {
echo "base";
}
}
حالا می خوام روش پیدا کنم ک یک تابع سراسری بنویسم مثل تابع پایینی بنویسم طوری ک هیچ موقع اجازه اجرای تابع داخل کلاس رو نده و خودش رو فراخوانی کنه:


public function test() {
echo "overwrite";
}
یعنی اگر کاربر نوشت BaseClass::test() تابع test() ک سراسری تعریف شده اجرا بشه.

amin1softco
سه شنبه 11 فروردین 1394, 17:26 عصر
اون تابع یکمی سربارشم زیاده و میاد مثل یک ناظر در هر تیک در هنگام اجرای توابع دستورات شما را اجرا می کنه شما در اجرا توابع می تونی اسم تابع را بدست بیارید و مقادیر مورد نظرتونو باز نویسی کنید البته من تست نکردم و درکل این چیزی که شما می خواهید معادل extend کردن است و در php پشتیبانی نمی شه و یکمی سرچ کردم باید از __call استفاده کنید
http://php.net/manual/en/language.oop5.overloading.php
اینم یک نگاهی بندازید شاید بدردتون بخوره
http://stackoverflow.com/questions/4697705/php-function-overloading/27231803#27231803