PDA

View Full Version : دلیل عدم static کردن بعضی از توابع مانند find دز yii



mojtaba.baghban
دوشنبه 21 اسفند 1391, 14:37 عصر
دلیل عدم static کردن بعضی از توابع مانند find دز yii چیه؟ آخه توابعی از این دست هیچ نیازی نداذند که از مدلمون نمونه داشته باشیم. چرا ما باید برای استفاده از این توابع مجبور باشیم ابتدا با استفاده از تابع استاتیک model یه نمونه‌ی خالی از مدلمون ایجاد کنیم تا بتوانیم از این تپابع استفاده کنیم؟
اگر اشتباه می‌گم که منو از گمراهی در بیارید

Pouyan2010
دوشنبه 21 اسفند 1391, 14:45 عصر
دلیل عدم static کردن بعضی از توابع مانند find دز yii چیه؟ آخه توابعی از این دست هیچ نیازی نداذند که از مدلمون نمونه داشته باشیم. چرا ما باید برای استفاده از این توابع مجبور باشیم ابتدا با استفاده از تابع استاتیک model یه نمونه‌ی خالی از مدلمون ایجاد کنیم تا بتوانیم از این تپابع استفاده کنیم؟
اگر اشتباه می‌گم که منو از گمراهی در بیارید
با سلام
به دلیل اینکه اگر تابعی static تعریف شود ممکن است بین صفحات share شود. که از سمت apache هستش.

mojtaba.baghban
دوشنبه 21 اسفند 1391, 15:01 عصر
به دلیل اینکه اگر تابعی static تعریف شود ممکن است بین صفحات share شود
خوب الان مشکل چیه؟ خاصیت static بودن و خوبیش همینه که ما تو هر صفخه‌ای بودن نیاز به اینکه از مدلمون نمونه بسازیم بتونیم از اون استفاده کنیم.
فکر کنم درست متوجه منظورتون نشدم که ممکن است بین صفحات share شود منظورتون چیه. به هر حال هر جا که فایلی که مدلمون توشه رو include کرده باشیم ما در اون صفحه به تمام خاصیت و متدهای استاتیک عمومی اون مدل دسترسی داریم و اگه یه نمونه از مدل بسازیم به تمام خاصیت و متدهای غیر استاتیک عمومی
اون نیز دسترسی خواهیم داشت.

که از سمت apache هستش.
متوجه این نمیشم

Pouyan2010
دوشنبه 21 اسفند 1391, 15:13 عصر
ببینید یک فکر اشتباه که متاسفانه اولش من هم داشتم این بود که apache با ورود هر کاربر به سایت یک thread آزاد می کند، بعدها فهمیدم اگر کاربری از آپاچه index.php رو بخواهد آپاچه بعد از کامپایل و ایجاد html برای ارسال سمت کلاینت بررسی می کند که در آن لحظه چند کاربر دیگه index.php رو همزمان صدا زده اند و بجای اینکه برای بقیه کاربران هم این کار را انجام دهد همین صفحه رو تحویل آنها می دهد و بار پردازشی رو کم می کند، خوب پس اگر ما یک کلاس رو new کنیم برایش حافظه جدا آزاد کرده ام و مختص آن Session هم می باشد.
همچنین ما می دانیم که متغیر های static یکبار تعریف و در حافظه باقی می مانند تا session بسته شود. در مورد توابع اگر تابعی static باشد ممکن است بین این کاربر و آن کاربر مشترک شود و در اصطلاح share شود.
منبع صحبت های خودم آقای مهرداد کیانیان استاد بزرگ من هستند که سر کلاس این حالت رو برای ما شبیه سازی کردند. و دیدیم که چه مشکل مهلکی ممکن است پیش بیاید.


اگر از دوستان نظری دارند و این حرفم رو نقض می کنند لطفا بازگو کنند.

mojtaba.baghban
دوشنبه 21 اسفند 1391, 15:32 عصر
ممنون از جوابهای کاملتون
الان متوجه شدم
حالا به نظر شما آیا آپاچی نباید این رویه رو تغییر بده و واسه هر درخواستی یه thread جدا در نظر بگیره؟ آخه مگه با این کارش چقدر بار پردازشی رو کم می‌کنه مگر اینکه سایت اونقدر پر‌بازدید باشه که همزمان درخواستهای یکسان زیادی برسه؟
آیا تو تنظیمات آپاچی این آپشن وجود نداره که این رویه رو تغییر داد؟

Pouyan2010
دوشنبه 21 اسفند 1391, 15:53 عصر
البته من این رو هم بگم شاید دیگه این مشکلات وجود نداشته باشند و اینکه برای هر کاربر session جدا در نظر گرفته می شود.

آپاچه یک بنیاده دوست عزیز، انقدر هم مهندس داره که تحلیل کنند آیا این کار خوبه یا بد! در ضمن فکر می کنید آپاچه همون اون بدون اشکال بود؟ می دونید چقدر باگ براش ارسال شده تا به این استاندارد رسیده؟

در مورد تنظیمات واقعا اطلاعی ندارم شرمنده دوست عزیز.

mojtaba.baghban
دوشنبه 21 اسفند 1391, 16:05 عصر
ممنون از وقتی که گذاشتی
پیروز باشی

mojtaba.baghban
جمعه 20 اردیبهشت 1392, 16:43 عصر
تو نسخه ۲ فریمورک yii توابعی مانند find که منطقا باید استاتیک باشن رو استاتیک تعریف کردند

mohsen_31369
سه شنبه 24 اردیبهشت 1392, 16:11 عصر
Post::model()->find();

از طریق پروپرتی model که استاتیک می باشد می توان به تابع find دسترسی داشت

mojtaba.baghban
چهارشنبه 25 اردیبهشت 1392, 00:03 صبح
Post::model()->find();

از طریق پروپرتی model که استاتیک می باشد می توان به تابع find دسترسی داشت
تو yii2 دیگه اینجوری نیست و خیلی سرراست می‌نویسی


Post::find();

sahebgharan
جمعه 14 تیر 1392, 02:31 صبح
البته استاتیک تعریف نشدن متدها باعث می شه دست آدم برای استفاده از inheritance و override کردن متدها باز باشه!