class myclass extends yourclass
{}
کلاس myclass رو فرزند کلاس yourclass می کنه.
با استفاده از parent::func می تونید به توابع استاتیک کلاس والد رو اجرا کنید.
class myclass extends yourclass
{}
کلاس myclass رو فرزند کلاس yourclass می کنه.
با استفاده از parent::func می تونید به توابع استاتیک کلاس والد رو اجرا کنید.
سلام
ببخشید من هنوز روش های استفاده ی صحیح از این نوع برنامه نویسی رو خوب یاد نگرفتم اما علاقه ی زیادی دارم یاد بگیرم. یعنی الان یک هفته ای هست که 100% برنامه هایی که مینویسم رو دارم با کلاس نویسی مینویسم هر چند سرعت برنامه نویسیم در حد خیلی زیادی اومده پایین.
سوالاتی داشتم که شاید براتون ساده باشه :
فرض کنید من یک کلاسی دارم داخل فایل A.php که به عنوان مثال داخلش کلاسی ساده به اسم ClassA نوشته شده که دارای متدی به اسم PrintMyname ـه که یک رشته ای رو چاپ میکنه
کلاس دیگری به اسم ClassB در فایلی به اسم B.php نوشتم و میخوام از متد کلاس ClassA که یک رشته رو چاپ میکرد استفاده کنم.
* دستور require ای که من در فایل B استفاده میکنم که با اون فایل A رو باید فراخونی کنم ، باید داخل کلاس ClassB نوشته باشه یا اول فایل بیرون از کلاس ؟
* اگر بخوام از متد کلاس A در فایل های دیگم که حاوی کلاس های دیگه هستند استفاده کنم چه دستوری باید بنویسم ؟ این کددرسته ===> ClassA::PrintMyname ؟
* الزامی به استفاده از extends هست یا نه؟
سعی کردم به روان ترین حالت ممکن مشکلم رو بگم. امیدوارم عزیزان محترم منظورم رو فهمیده باشن ...
1. دوست من اگر از دستور مذکور برای فراخوانی کلاس A داخل کلاس B استفاده کنی ، این معنی رو میده که شما کلاس A رو فرزند کلاس B قرار دادید. پس باید خارج کلاس B فراخوانی بشه کلاس A.
2. منظورت از فایل های دیگه اگر همون کلاس B باشه و با extends بعنوان فرزند کلاس A شناخته شده باشه بله با دستور parent::PrinMyname یک متد از داخل کلاس A یا همون پدر یا والدین رو فراخوانی می کنید.
3. الزامی در کار نیست. زمانی شما نیاز دارید که بطور بسیار امن و راحت از متدی داخل یک کلاس که مربوط به کلاس دوم ما میشه استفاده کنید (البته بگم چند کلاسه کردن برای فهم و درک و عملکرد بهتر است) در اینجا می بایست از extends استفاده کنید تا با دستوری که در پاسخ شماره 2 نوشتم آن را فراخوانی کنید.
ممنون اما من نمیخوام از دستور Extends استفاده کنم
در استفاده از توابع میشه داخل یک تابع از تابعی دیگه استفاده کرد. من میخوام داخل متد یک کلاس متدی از کلاس دیگر رو استفاده کنم اما نمیخوام روابط والد و فرزندی بین این دو کلاس وجود داشته باشه. چنین قابلیتی وجود داره؟
این چه ربطی به شی گرایی داشت ؟!!
با سلام مجدد، ضمن تشكر از همه دوستان فعال در اين بحث، به زودي يك آموزش جامع درمورد شئ گرايي در PHP آماده ميكنم و كم كم در همين بحث قرار ميدم.
موفق باشيد.
در ابتدا از MMSHFE عزیز ممنونم که آموزش شئی گرایی رو می خوان بنویسن .
در مورد استفاده یه مند از یه کلاس در کلاس دیگه باید بگم که شما در هر شرایطی میتونید از هر متدی در هر متد دیگری استفاده کنید مگر اینکه شرایط زیر رو داشته باشه :
- متد مربوطه private ، protected باشه .
- کلاس حاوی متد اصلا فراخوانی نشده باشه .
در مورد static بودن متد هم باید بگم که در این حالت فقط از طریق نام کلاس و یا والد بودن حق دسترسی داریم ( البته اگه public باشه ) و یه توضیح دیگه هم اینکه اگر شئی از یه چنین کلاسی ایجاد کنید به متدهایی که حالت static هستن در اون شئی دسترسی ندارید . و فقط در خود کلاس بهش دسترسی دارید .
یه مثال :
<?php
class a{
function x(){ echo 'x method'; }
static function b(){ echo 'b method'; }
}
$objectA = new a();
$objectA->x(); // echo 'x method'
$objectA->b(); // error
a::x(); // echo 'x method'
a::b(); // echo 'b method'
?>
با سلام خدمت دوستان
من oop رو بلد نیستم و با خوندن این تاپیک تازه یه چیزایی دستگیرم شده
یه چند تا سوال داشتم میخواستم بدونم کاربرد اینها چیه ؟
var , public , private , protect , ...
به عنوان مثال :
private $a;
var $b;
public $c;
public function displayForm() {...}
private function _createEventObj() {...}
...
var که همون نسخه قدیمی public باید باشه و استفاده ازش توصیه نمیشه! public و private و protected برای دسترسی دادن یا ندادن در شی گرایی استفاده میشه. مثلاً اگر دسترسی یک تابع رو روی public بگذاریم از هر کجایی هر وقت بخوایم می تونیم ازش استفاده کنیم. اما اگر private باشه فقط خود کلاس می تونه ازش استفاده کنه و اما اگر protected باشه هر کلاس و مشتقاتش میتونه ازش استفاده کنه. و ربطی به امنیت اینا ندارن و این دسترسی رو خودمون تشخیص میدیم. و برای اینه که توسعه دهنده دچار اشتباه نشه!
با سلام، دوست گرامي از var در زماني استفاده ميشه كه بخواين يك متغير رو تعريف كنيد ولي فعلاً مقداري بهش ندين. private باعش ميشه يك عنصر كلاس (فيلد، متد يا هر چيز ديگه كه باشه)، بصورت خصوصي در بياد و public اون رو بصورت عمومي در مياره. براي اينكه دقيقاً فرقشون رو بدونيد، بايد اينطور توضيح بدم كه كلاً ما از عناصر يك كلاس در دو قسمت استفاده ميكنيم:
1- كد درون كلاس (يعني جايي كه با آكولاد باز و بسته ابتدا و انتهاي كلاس مشخص ميشه)
2- ازطريق يك شئ كه از روي كلاس ايجاد ميكنيم (خارج از كد كلاس و در جايي كه كلاس فراخواني ميشه)
عناصر public در هر دو قسمت قابل استفاده هستن ولي عناصر private فقط در قسمت اول يعني كد درون كلاس قابل استفادن. براي مثال، به كد زير دقت كنيد:
class Test
{
private PriMethod()
{
//codes
}
public PubMethod()
{
$this->PriMethod(); //It's ok
}
}
$test = new Test();
$test->PubMethod(); //It's ok
$test->PriMethod(); //Error
اما اين وسط، عناصر protected چه كاره هستن؟ بايد دقت كنيد كه اگه يك كلاس از كلاس ديگه مشتق بشه، تمامي كدهاي غير private اون رو به ارث ميبره. مثلاً اگه كلاس پايه، يك فيلد يا متد از نوع public داشته باشه، اين فيلد يا متد در كلاسهاي مشتق شده از اون و همچنين اشياء ايجاد شده از اون كلاس هم وجود خواهند داشت اما اگه private باشه، نه كلاسهاي مشتق شده بهش دسترسي دارن و نه اشيائي كه از اون كلاس ايجاد ميشن. حالا اگه بخوايم عنصري داشته باشيم كه در كلاس مشتق شده وجود داشته باشه (ارث برده بشه) ولي ازطريق اشياء قابل استفاده نباشه، راه حل چيه؟ جواب: عناصر protected راه حل ما هستن: اين عناصر براي كلاسهاي مشتق شده از كلاس پايه، مثل public عمل ميكنن و ارث برده ميشن ولي براي اشياء ايجاد شده از كلاس مثل private عمل ميكنن و از بيرون ديده نميشن.
اميدوارم خوب توضيح داده باشم.
موفق باشيد.
این چیزی که شما میگین ماله C# یا javascript ...
تو php4 از var برای تعریف عناصر کلاس استفاده میشد ...
تو php5 هم کار میکنه ولی یه E_STRICT میده تا 5.3 و از اون به بعد هم deprecated شده ...
توی 5 var به عنوان public تفسیر میشه ...
It's for declaring class member variables in PHP4, and is no longer needed. It will work in PHP5, but will raise an E_STRICT warning in PHP5 up to version 5.3, as of which it has been deprecated
و تو 6 هم E_STRICT حذف شده ...
The second issue was removing support for "var" altogether in PHP 6. Now it is an alias for "public", but it will raise an E_STRICT warning. As there is no real reason why we should remove it, we agreed on simply making "var" an alias to "public" and removing the warning.
با سلام، بنده توضیحاتی رو از یک کتاب در آورده ام راجع به متد ایستا (استاتیک ) که در اینجا برای دوستان قرار میدهم : (book name : php the complete reference)
هنگامی که متدهای ایستا ایجاد می کنید، می توانید این کار را انجام دهید: متد را فراخوانی کنید بدون اینکه مجبور باشید ابتدا یک شی از آن کلاس بسازید :
class Math{
public static function say_hi()
{
echo "The Math class says 'Hello there'. <br />";
}
}
ما در کد بالا یک متد استاتیک تعریف کردیم که یک رشته را برای ما چاپ می کند، حال برای صدا کردن این متد از کد زیر استفاده می کنیم :
Math::say_hi();
حالا فرض کنید که می خواهید متد squarer را بنویسید و آن را به کلاس Mathh اضافه کنید . عددی را که می خواهید مجذورش محاسبه شود به آن متد انتقال می دهید :
class Math{
public static function say_hi(){
echo "The Math class say 'Hello there'. <br />";
}
public static function squarer($op){
echo $op, "<sup>2</sup> = ", $op * $op, "<br />";
}
}
echo "Using the math class ...<br />";
Math::say_hi();
Math::squarer(8);
یه سوال:
استفاده از این روش چه کاربردی داره و کجا باید استفاده بشه؟
اين روش باعث ميشه براي استفاده از يك عنصر از كلاس، نياز نباشه يك شئ از اون ايجاد كنيم. اين كار هم در مصرف حافظه صرفه جويي ميكنه و هم اينكه به ما كمك ميكنه يكسري عناصر رو بين اشياء كلاس به اشتراك بگذاريم. براي مثال، اين حالت رو درنظر بگيريد:
public class MyClass {
private static int $count = 0;
public MyClass() {
MyClass->$count++;
}
public static Count() {
return MyClass->$count;
}
}
از اونجا كه count$ بصورت استاتيك تعريف شده، موقع ايجاد يك شئ جديد، دوباره 0 نميشه و سازنده هاي اشياء هم اون رو افزايش ميدن. حالا هرجا خواستين بدونيد چند تا شئ از كلاس ايجاد شده، ()MyClass->Count رو نمايش بدين. دقت كنيد كه براي دسترسي به عناصر استاتيك از نام كلاس استفاده ميشه نه نام اشياء ايجادشده از كلاس. اين روش مزاياي زيادي داره. مثلاً يك شئ، عنصر static رو مقداردهي كنه و شئ ديگه، اون رو بخونه و...
موفق باشيد.
آخرین ویرایش به وسیله MMSHFE : شنبه 08 مرداد 1390 در 10:38 صبح دلیل: ارائه مثال
با سلام
آیا کتاب فارسی برای آموزش OOP وجود دارد ، منظورم این است که آموزش دارای کد های بزرگ باشد.اگر دوستان پیدا کردن برای ما هم بگذارند.
موفق باشید.
به نام خدا
با سلام
تا به حال هر مثالی که زدید با برنامه نویسی عادی هم می شد انجام داد تازه انعطاف پذیرتر !!!
میشه یک مثال بزنید که نشه با برنامه نویسی عادی انجام داد.
با تشکر از همه ی دوستان مخصوصا hidensoft.
دوست خوبم من به شما کتاب راهنمای جامع PHP انتشارات نشر علوم رو پیشنهاد میکنم که به خوبی دو فصل را به شی گرایی اختصاص داده ...
به نام خدا
با سلام
کسی کتاب نداشت معرفی کنه! (فارسی و جدید)
سلام دوست عزیزم شی گرایی وقتی خودش رو نشون میده که پروژه عظیم باشه نه تو این مثال هایی که واسه یاد گیری دوستان زحمتشو کشیدن
میخوای عملی ببینی برو vBulletin و جوملا رو دانلود کن و کرهاشو بررسی کن اینم یه مثال عملی
به نام خدا
با سلام
من که چیزی از ویبولتین نمی فهمم ، چون خیلی پیچیده است ، اگه شما می دونید ، بیایید کد هاش رو درس به درس تشریح کنید ، خیلی طرفدار داره این کار! اگه سایتی هم داشته باشید ، رنک سایتتون رو این کار خیلی بالا می بره!سلام دوست عزیزم شی گرایی وقتی خودش رو نشون میده که پروژه عظیم باشه نه تو این مثال هایی که واسه یاد گیری دوستان زحمتشو کشیدن
میخوای عملی ببینی برو vBulletin و جوملا رو دانلود کن و کرهاشو بررسی کن اینم یه مثال عملی
در ضمن نظر من هم تشریح یک پروژه عظیم شی گرایی به زبان فارسی است ، البته تاکنون جدید ترین کتاب فارسی که در این مورد خوندم ، کتاب شی گرایی آقای امجدی بوده است ، اما در این کتاب پروژه ای ندارد.
حالا اگر شما و دیگر دوستان می تونید ، این کار رو انجام بدید بسم الله!
سلام دوست عزیزم حالا اون که در حد یه شوخی بودامیدوارم ناراحتت نکرده باشم
ولی یه سورس از کتاب Wrox PHP and MySQL Create Modify Reuse از فصل اول این کتاب میزارم که ساخت یه سیستم ورود خروج کاربر با استفاده از کلاس user است هم حجم کمه هم واسه شروع بنظرم جالب میاد!
البته بگم فقط واسه شروع وگرنه اونقد پیشرفته نیست ولی اگه تا حالا پروژه ای نزدی که توش شی گرایی باشه این حتما کمکت میکنه
فصلهای دیگه کتاب هم مثالهای جالبی داره میتونی بخونی
امیدوارم کمکت کنه و البته از من دلگیر نشده باشی
به نام خدا
با سلام
مرسی ، اما خوبه قبل از این که انتشار بدید یه تغییراتی تو کد بدید ، منظور این که هم نسخه اصلی رو بزارید و هم نسخه خودتون رو چون کد ها پر از اشکاله!
بازم دستتون درد نکنه، بازم ادامه بدید.
با سلام
اینم یه کلاس ساده کاری از بنده ی حقیر
امید وارم خوشتون بیاد
http://www.phpclasses.org/package/71...-tooltips.html
به نام خدا
با سلام
با تشکر از دوستان ولی کلاستون کاربرد زیادی نداره و تقریبا ضعیف است ، خوب است کد کلاس را مستقمیا نگذارید و فقط از آن ها بهره گرفته و کدی بنابر سلیقه خودتان منتشر کنید.
چون اگر بنا به قرار دادن لینک ها مستقیم از سایت یا آپلودشده در برنامه نویس باشد، دیگر نیازی به این کار نیست یه سر به سایت هایی مانند راکس و phpclass می زنیم که کداش خیلی بهتر و جامع تر و زیاد تره.
به نظر من اگر کد ها رو خودتون بنویسید خیلی بهتره.
من هم یک کد که مربوط به موضاعات سایت است برای شما قرار دادم ، البته اصل کد مال خودم نیست و فقط ویرایشش کردم ، اما کد خوب و مفیدی است.
arm_cat.zip
موفق باشید.
بهتره در مورد ساخت سيستم مديريت محتوا با شي گرايي يه كم بحث كنيم اصلا ببينيم چجوري كار ميكنه. اين لينك يه آموزش خوب در موردش داره و خيلي هم ساده است.
ساخت ساده ترين سيستم مديريت محتوا با شي گرايي
بهتره در مورد design pattern ها و نحوه استفادشون یه آموزش راه بیفته چون خیلی از برنامه نویسها باهاش آشنایی ندارن یا ازش استفاده نمیکنن
حالا اگر کسی پیدا نشد شاید خودم شروع کنم
با سلام حضور دوستان بنده هم با saina2006 موافقم ، لطفا در مورد الگوهای طراحی بحث بشه تا در این مورد هم مطالبی رو یاد بگیریم!!!!
ممنون .
همیشه شاد باشید
بخاطر یک $ که اشتباهاً قبل از count توی توابع نوشته شده. کد صحیح اینه. شرمنده سریع تایپ کرده بودم:
public class MyClass {
private static int $count = 0;
public MyClass() {
MyClass->count++;
}
public static Count() {
return MyClass->count;
}
}
موفق باشید.
مرسی از پیگیری شما،دوست عزیز پیغام خطایی که به من میده باز پارسه هستش ، از خط اول public رو که بر میدارم بازم پیغام خطا از خط دوم داد که int رو حذف کردم ،باز حطا از خط بعدش ...
class MyClass {
private static $count = 0;
public function MyClass() {
MyClass->count++;
}
public static function Count() {
return MyClass->count;
}
}
با این کد باز از خط MyClass->count++; خطا میگیره شما گفتید باید نام کلاس رو استفاده کرد برای متغیر های static
و سوال مهمتر کلا برای اینکه یکسری متغیر ها (پروپرتی ها)با ایجاد فرضا دو شی که با شی اول مقدار پروپرتی مورد نظر عوض کرد و با شی دوم مقدار پروپرتی رو بخونه و همان مقداری باشه که اولی وارد کرده باید اون پروپرتی static تعریف شده باشه؟
با این کد کار میکنه
class MyClass {
private static $count = 0;
public function MyClass() {
MyClass::$count++;
}
public static function Count() {
return MyClass::$count;
}
}
این نمونه کد هست مشکل اصلی کد هم این بود که count جز کلمات رزرو هستش برای همین خطا میداد
class MyClass {
static private $varCount;
public function __construct() // Or init
{
self::$varCount++;
}
static public function getCount()
{
return self::$varCount;
}
}
$test = new MyClass();
$test = new MyClass();
$test = new MyClass();
echo MyClass::getCount();// echo 3
$test = new MyClass();
echo MyClass::getCount();// echo 4
پاسخ سوآلتون هم مثبته
کلا بیشترین جایی که در هر پروژه MVC استفاده از Static رو میبینید در ارتباط با بانک اطلاعاتی هستش برای نگه داشتن ارتباط
موفق باشید
شرمنده حقیقتش اون موقعی که مثال رو گذاشته بودم، از #C کپی کردم و سریع یکسری تغییرات دادم چون فقط قصدم آشنایی با کاربرد مقادیر بود ولی الآن که دقت کردم دیدم یکسری اشتباهات در Syntax وجود داشته که عذرخواهی میکنم. کد صحیح اینه:
class MyClass {
private static $objCount = 0;
public function MyClass() {
self::objCount++;
}
public static function ObjCount() {
return self::objCount;
}
}
$t1 = new MyClass();
$t2 = new MyClass();
$t3 = new MyClass();
echo MyClass::ObjCount(); // echo 3
$t4 = new MyClass();
echo MyClass::ObjCount(); // echo 4
موفق باشید.
سلام
من داشتم مطالب رو از اول یاد می گرفتم که وقتی اقای hidensoft به قسمت اموزش یه موتور جستجوگر و mvc رسیدند اصلا هیچ توضیحی ندادند و من هم که تازه کارم خیلی برام سخت بود درک این دو درس تا قبلش همه اموزشهاشو خط به خط توضیح میداد البته اموزشها ماله سال 86 فک کنم باشه و نمیدونم که خود اقای hidensoft اصلا دیگه تو این انجمن هست یا نه
و از اساتید محترم تقاضا دارم که این دو درسو برام تشریح کنید (صفحات 1 و 2 اموزش ساخت موتور جستجوگر و mvc )
قسمت موتور جستوجو فقط یک نمونست می تونید از این قسمت فعلا رد بشید ادامه بدید. در مورد MVC سوالی اگر دارید بپرسید در خدمتم.
به نام خدا
با سلام و خیر مقدم به جناب hidensoft
فکر کنم که Mvc توی php زیاد کاربرد نداشته باشه، چون الان تا اون جایی که میدونم ویبولتین، وردپرس و... هیچ کدام بر اساس Mvc طراحی نشده اند و Mvc فقط کار رو در برنامه نویسی پیچیده تر می کنه!قسمت موتور جستوجو فقط یک نمونست می تونید از این قسمت فعلا رد بشید ادامه بدید. در مورد MVC سوالی اگر دارید بپرسید در خدمتم.
نظر شما چیست؟
بطور کلی MVC موقعی که پروژه بزرگ باشه و قصد توسعه و نگهداری طولانی مدت از اون رو داشته باشین مفید هست. کلاً ایده کدنویسی ساخت یافته در پروژه های جدی و حرفه ای، ایده خوبیه و MVC هم یک الگوی ساخت یافته و منسجم و خوب هست. حالا یک نفر یا یک تیم برنامه نویسی دوست نداره ازش استفاده کنه، نمیشه بگیم که بدرد نمیخوره یا کاربرد کمی داره، حتی اگه اون یک نفر یا تیم برنامه نویس، گروه سازنده vBulletin باشه!
در تکمیل حرفهاتون
الان 99 درصد فریم ورک ها معماری MVC رو رعایت میکنن همچنین سیستم های مدیریت محتوا دارن به این سمت میرم .
جوملا رو نگاه کنید ورژن فعلی