loading...
آموزش فریم ورک Yii
امیر بازدید : 74 سه شنبه 12 اردیبهشت 1396 نظرات (0)

مبحث امروز که در سایت GoYii به آن می پردازیم توابع مربوط به کلاس ها می باشد .

class GoYii {
public $name = "GoYii";
public function displayName() {
echo $this->name;
}
}

توابع مرتبط با کلاس ها 
تابع زیر برای بررسی کلاس هایی که قبلا ایجاد شده اند به کار میرود
به این معنی که آیا کلاس وجود دارد یا نه
class_exists(“GoYii”)
خروجی
true or 1
در صورتی که وجود نداشته باشد خالی بر میگرداند
/* * ******************************** */
تابع بعدی نمایش کلاس های لود شده را نمایش میدهد.
کلیه ی کلاس ها را در قالب یک آرایه نمایش می دهد
get_declared_classes()
بررسی وجود پروپرتی یا متد در کلاس
در صورت وجود فقط true بر میگرداند

method_exists('GoYii', 'displayName')
property_exists('GoYii', 'name')

لیست کامل توابع مربوط به کلاس را می توانید در سایت اصلی ببینید. اینجا

امیر بازدید : 73 دوشنبه 11 اردیبهشت 1396 نظرات (0)

یه مجیک متد دیگه ای هم وجود داره که به شما کمک میکنه هر متدیو اورلود کنین.
این قابلیت توی پی اچ پی ۵ هست
__call()
این متد به شما این امکانو میده که اگه پس از ایجاد نمونه ای از شی یه متدیو فراخونی کردین که نبود در کلاس اونو ایجاد میکنه واستون
این متد دوتا آرگومان میکیره
اولی میشه اسم متد
دومی میشه آرگومان هاش
بیشتر برای مدیریت اررور ها استفاده میشه این متد

class Overloader {
function __call($method, $arguments) {
echo "You called a method named {$method} with the following
arguments 
";
print_r($arguments);
echo "
";
}
}
$ol = new Overloader();
$ol->access(2, 3, 4); // این متد در کلاس وجود ندارد.
// با استفاده از متد کال میتونیم از بروز ارور جلوگیری کنیم
$ol->notAnyMethod("boo");


امیر بازدید : 53 یکشنبه 10 اردیبهشت 1396 نظرات (0)

برنامه نویسی شی گرا php 
خوب برای حل کردن( مشکل قبلی) از متد های جادویی استفاده میکنیم
یکی ازین مجیک متد ها کارش اینه که گت و سترا به صورت اتومات انجام میده
خوب اونا
__set()
__get()
هستن
مثال:

class Student {
private $properties = array();
function __get($property) {
return $this->properties[$property];
}
function __set($property, $value) {
$this->properties[$property] = "AutoSet {$property} as: " . $value;
}
}
$st = new Student();
$st->name = "Afif";
$st->roll = 16;
echo $st->name ;
echo $st->roll;

ویرایش

امیر بازدید : 88 شنبه 09 اردیبهشت 1396 نظرات (0)

اکسسور متد AccessorMethods
متد های ساده ای هستن که امکان گت یا ست کردن مقدار توی هر کلاسی را فراهم میکنه.
بهترین راه برای دسترسی به پروپرتی های یک کلاس , بدون دسترسیه مستقیم به اون متد ها, همین اکسسور متد ها هستند.
اککسور متد ها دو نوع دارند.
گتتر getter = خواندن مقادیر از پروپرتی های یک کلاس
ستتر setter = ست کردن مقدار برای پروپرتی های یک کلاس
قوانین نوشتن اککسور
برای مقدار دهی و مقدار خوانی باید در ابتدای متد از set or get استفاده کرد و بعد با حرف بزرگ شروع کرد
نکته ی مهم
برای دسترسی به پروپرتی ها استفاده میشود

برای استفاده از ستتر و گتتر پروپرتی ها پرایویت هستند

class Student {
private $name;
private $roll;
public function setName($name) { // ستتر
$this->name = $name;
}
public function setRoll($roll) {
$this->roll = $roll;
}
public function getName() { // گتتر
return $this->name;
}
public function getRoll() {
return $this->roll;
}
}

این روش خوبه اما نه برای تعداد زیاد.
فرض کنین صد پروپرتی داریم
اگر بخوایم برای همشون ازین روش استفاده کنیم باید صد گتتر و صد ستتر استفاده کنیم
برای یادگیری این موضوع به مبحث بعدی توجه کنین

امیر بازدید : 53 یکشنبه 27 فروردین 1396 نظرات (0)

آموزش برنامه نویسی شی گرا php oop
کلمه کلیدی استاتیک خیلی مهم در مبحث شی گرایی است.
متد ها و پروپرتی های استاتیک نقش حیاتی ای در طراحی نرم افزار و دیساین پترن بازی میکنن. (design patern)

هنگامی که شما میخواین از شی ای استفاده کنین.
نمونه ای از آن را ایجاد میکنین.  $a=new class();

در غیر این صورت شما نمی توانید به آن شی دسترسی پیدا کنین.
اما برای متد ها و پروپرتی هایی که استاتیک هستن راه دیگه ای وجود داره
شما به متد ها و پروپرتی هایی که به صورت استاتیک تعریف شده اند می توانید به صورت مستقیم دسترسی داشته باشین بدون اینکه نمونه ای از اون کلاس ایجاد کنین
استاتیک ها مانند گلوبال ها هستند.
علاوه بر این متد ها یا پروپرتی های استاتیک میتونن آخرین وضعیتی که دریافت کردن و اختصاص یافتنو در خود نگه دارند.
استاتیک ها فعالیت های ویژه ای انجام میدن.
همچنین آبجکت های ویژه ای
در مباحث دیساین پترن استفاده میشن
مثال
برای فراخوانی متد یا پروپرتی استاتیک بیرون از کلاس از نام کلاس استفاده میشه به علاوه دو نقطه(classs::)

در داخل کلاس اگر متد یا پروپرتی ای که استاتیک هستو بخواین فراخوانی کنین از سلف دونقطه استفاده میشه(self::)

نباید همیشه از استاتیک استفاده کرد.

برای درک بهتر به مثال های زیر توجه کنین:
مثال اول:


class DBManager {
public static function getMySQLDriver() {
//instantiate a new MySQL Driver object and return
}
public static function getPostgreSQLDriver() {
//instantiate a new PostgreSQL Driver object and return
}
public static function getSQLiteDriver() {
//instantiate a new MySQL Driver object and return
}
}
$dbdriver = DBManager::getMySQLDriver();

مثال دوم:

class StaticTester {
private static $id = 0;
function __construct() {
self::$id +=1;
}
public static function checkIdFromStaticMehod() {
echo "Current Id From Static Method is " . self::$id . "
";
}
public function checkIdFromNonStaticMethod() {
echo "Current Id From Non Static Method is " . self::$id . "
";
}
}
$st1 = new StaticTester(); // ابتدا کانستراکتور فراخوانی میشود سپس آیدی یدونه اضافه میشه
StaticTester::checkIdFromStaticMehod(); //id=1
$st2 = new StaticTester();
$st1->checkIdFromNonStaticMethod(); //id=2
$st1->checkIdFromStaticMehod(); //id=2
$st2->checkIdFromNonStaticMethod(); //id=2
$st3 = new StaticTester();
StaticTester::checkIdFromStaticMehod(); //id=3

امیر بازدید : 60 چهارشنبه 02 فروردین 1396 نظرات (0)

.htaccess در root Options +FollowSymlinks RewriteEngine On # deal with admin first RewriteCond %{REQUEST_URI} ^/vaymand/(admin) RewriteRule ^admin/assets/(.*)$ backend/web/assets/$1 [L] RewriteRule ^admin/css/(.*)$ backend/web/css/$1 [L] RewriteCond %{REQUEST_URI} !^/vaymand/backend/web/(assets|css)/ RewriteCond %{REQUEST_URI} ^/vaymand/(admin) RewriteRule ^.*$ backend/web/index.php [L] RewriteCond %{REQUEST_URI} ^/vaymand/(assets|css|uploads|vaymandshop) RewriteRule ^assets/(.*)$ frontend/web/assets/$1 [L] RewriteRule ^css/(.*)$ frontend/web/css/$1 [L] RewriteRule ^uploads/(.*)$ frontend/web/uploads/$1 [L] #RewriteRule ^uploads/advertise(.*)$ frontend/web/uploads/advertise/$1 [L] RewriteRule ^vaymandshop/(.*)$ frontend/web/vaymandshop/$1 [L] RewriteCond %{REQUEST_URI} !^/vaymand/(frontend|backend)/web/(assets|css)/ RewriteCond %{REQUEST_URI} !index.php RewriteCond %{REQUEST_FILENAME} !-f [OR] RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ frontend/web/index.php .htaccess در frontend فولدر web RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?/$1 [L] .htaccess در backendفولدر web RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?/$1 [L] در فولدر common و در فولدر components Request.php namespace common\components; class Request extends \yii\web\Request { public $web; public $adminUrl; public function getBaseUrl(){ return str_replace($this->web, "", parent::getBaseUrl()) . $this->adminUrl; } public function resolvePathInfo(){ if($this->getUrl() === $this->adminUrl){ return ""; }else{ return parent::resolvePathInfo(); } } } تنظیمات main.php در frontend use \yii\web\Request; return [ 'request' => [ 'class' => 'common\components\Request', 'web' => '/frontend/web' ], 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, ], ] تنظیمات main.php در backend use \yii\web\Request; return [ 'request' => [ 'class' => 'common\components\Request', 'web' => '/backend/web', 'adminUrl' => '/admin' ], 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, ], ]

امیر بازدید : 86 پنجشنبه 12 اسفند 1395 نظرات (0)

تدریس خصوصی برنامه نویسی به زبان PHP برای sort کردن اطلاعات در actionindex در کنترلر به روش زیر عمل می کنیم: public function actionIndex() { $searchModel = new BookSearch( ); $dataProvider = $searchModel->search(Yii::$app->request->queryParams); $dataProvider->setSort([ 'defaultOrder' => ['status' => SORT_ASC] ]); return $this->render('index', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider, ]); }

امیر بازدید : 66 چهارشنبه 11 اسفند 1395 نظرات (0)

تدریس خصوصی برنامه نویسی به زبان PHP

<ul>

<ol>

 

ابسترکت تقریبا شبیه اینتر فیس هست

 

 با این تفاوت که متد ها دارای بادی هستند.

</ol>

 

 

<ol>

ابسترکت ها بر عکس اینترفیس ها که implements میشدن.

 extend میشن

</ol>

 

 

<ol>

 

 نکته زمانی که کلاسی را ابسترکت میکنین نمیتونین از final  استفاده کنین.

چون ابسترکت  اکستند میشه و final  مانع اکستند شدنه

</ol>

 

 

<ol>

شما نمیتوانید از کلاسی که ابسترکت کردین نمونه ایجاد کنید

</ol>

 

<ol>

در ابسترکت شما نمیتوانید از مودیفایر پرایویت و پروتکتد استفاده کنین.

</ol>

 

 

</ul>

 

مثال :

<code>

interface DBDriver {

    public function connect();

    public function execute($sql);

}

abstract class ReportGenerator {

    public function generateReport($resultArray) {

//write code to process the multidimensional result array and

//generate HTML Report

    }

}

</code>

 

<ul>

<ol>

 

همونطور که شما میتونین یه کلاس ابسترکت کنین

  میتونین یه متد نیز ابسترکت کنین

</ol>

<ol>

 با این تفاوت که هر زمان که متدیو ابسترکت میکنین

  اگر کلاسی از اون کلاس ارث برد.

   حتما باید اون متدی که ابسترکت شدرو OVERRIDEکنه

</ol>

</ul>

امیر بازدید : 63 سه شنبه 10 اسفند 1395 نظرات (0)

نام پیش فرض پروژه ها در yii2  هم در ورژن بیسیک و هم ادونس "My Application" می باشد .

 

برای تغییر نام پیش فرض کافی است در main.php یا web.php  کد زیر را قرار دهید :

 

&nbsp;

<code>

$config = [

    'timeZone' => 'Asia/Tehran',

    'language' => 'fa_IR',

    'id' => 'basic',

    'name'=>'طبشهر',

]

</code>

برای دسترسی به آن نیز از Yii::$app->name  استفاده می کنیم

امیر بازدید : 84 پنجشنبه 05 اسفند 1395 نظرات (0)

اینترفیس ها یک نوع پولیمورفیسم هستند. اینترفیس ها کلاس های خالی ای هستند که فقط شامل متد ها میشن,یعنی فقط متد در اون ها تعریف میکنیم-البته بدون بادی. هر کلاسی هم که از این اینترفیس ما استفاده کنه در اصطلاح ایمپلیمنت کنه حتما باید اون متد هارو استفاده کنه. در غیر این صورت ارور مواجه میشه. اینترفیس ها چیزی نیستند جز یه سری استرینگ که کمک میکنه که کلاس هایی که ایمپلیمنت شدن از اونا استفاده کنند. هر کلاسی میتونه از اینترفیس ها استفاده کنه با استفاده از این کلمه کلیدی implements در اینتر فیس شما فقط متد تعریف میکنین بدون بادی. مثال interface DBDriver { public function connect(); public function execute($sql); } نحوه ی اشتباه class MySQLDriver implements DBDriver { } نحوه ی اشتباه class MySQLDriver1 implements DBDriver { public function connect() { //connect to database } public function execute() { //execute the query and output result } } نحوه ی صحیح class MySQLDriver2 implements DBDriver { public function connect() { //connect to database } public function execute($query) { //execute the query and output result } }

تعداد صفحات : 20

درباره ما
Profile Pic
آموزش مرحله به مرحله فریم ورک Yii
اطلاعات کاربری
  • فراموشی رمز عبور؟
  • آمار سایت
  • کل مطالب : 197
  • کل نظرات : 0
  • افراد آنلاین : 5
  • تعداد اعضا : 1
  • آی پی امروز : 42
  • آی پی دیروز : 33
  • بازدید امروز : 131
  • باردید دیروز : 95
  • گوگل امروز : 0
  • گوگل دیروز : 0
  • بازدید هفته : 266
  • بازدید ماه : 373
  • بازدید سال : 2,348
  • بازدید کلی : 26,904