PDA

View Full Version : سوال: مشکل با چند دستور و عملگر در php که تا حالا ندیدم



leaping
سه شنبه 26 آبان 1394, 10:00 صبح
سلام دوستان کسی در مورد دستورات زیر و اینکه چه عملی انجام میدن اطلاعاتی داره؟

خیلی برام سوال شده که اینا به چه دردی میخورن؟

اولیش این


return [
'db' => [
'host' => '127.0.0.1',
'username' => 'user',
'password' => 'pass'
],
];


دومیش



(new yii\web\Application($config))->run();


که توی فریمورک yii استفاده شده اگه کل بدنه رو توضیح بدین ممنون میشم


سومیش این:



namespace

use



پیشاپیش از جوابهاتون تشکر میکنم

alih110
سه شنبه 26 آبان 1394, 10:31 صبح
سلام دوستان کسی در مورد دستورات زیر و اینکه چه عملی انجام میدن اطلاعاتی داره؟

خیلی برام سوال شده که اینا به چه دردی میخورن؟

اولیش این


return [
'db' => [
'host' => '127.0.0.1',
'username' => 'user',
'password' => 'pass'
],
];


دومیش



(new yii\web\Application($config))->run();


که توی فریمورک yii استفاده شده اگه کل بدنه رو توضیح بدین ممنون میشم


سومیش این:



namespace

use



پیشاپیش از جوابهاتون تشکر میکنم

سلام
مورد اولی از php 5.3 به بعد (اگر نسخه رو اشتباه نگفته باشم) آرایه رو میشه به این شکل استفاده کرد

موارد بعدی رو اطلاعات کامل ندارم در موردشون

hamedarian2009
سه شنبه 26 آبان 1394, 12:02 عصر
1- خروجی اون فایل یک آرایه هست و می تونید در فایل دیگه که اونو ضمیمه کردین به صورت ارایه بهش دسترسی داشته باشید فرض کن اون فایل اسمش config.php باشه به این صورت :

$config = include 'config.php';

2- این هم چیز خاصی نداره فقط چون کلاس از namespace استفاده کرده هنگام ایجاد آبجکت از کلاس باید نام کلاسو به همراه namespace اون به طور کامل بیارید تو کدی که گزاشتین هم ابتدا آبجکت از کلاس Application ایجاد کرده و چون داخل پرانتزه به خاطر اولویت عملگرها ابتدا آبجکت ایجاد میشه و سپس متد run رو فراخوانی کرده. کدی که گزاشتید معادل این کده :


$app = new yii\web\Application($config);
$app->run();


3- namespace هم کاربردش اینه که تو یه پروژه که بزرگه و معمولا فریمورکها که تیمی هم کار میشن و ممکنه نام کلاسی مشابه با نام کلاس دیگه تعریف کنید و این باعث ایجاد خطا میشه از namespace استفاده میشه تا مشکل تداخل نام ها بوجود نیاد مثال زیر رو ببین


namespace app\test;

class A {
private $name;
function __construct($name) {
$this->name = $name;
}

public function run()
{
return 'hello '.$this->name.'<br />\n';
}
}

echo (new \app\test\A('ali'))->run();

include 'test.php';
$obj = new \app\bbb\A();
$obj->bbb();

همانطور که می بینی دوتا کلاس A که یکیش تو صفحه test.php تعریف کردیم ولی با namespace های متفاوت داریم که اگه فضای نام رو تعریف نمیکردیم خطا میداد

موقعی هم که بخواهیم یک کلاس رو داخل کلاس دیگه که namespace داره استفاده کنیم می تونیم به جای نوشتن نام کلاس به صورت کامل همراه با فضای نام از use و ایمپورت کردن استفاده کنیم مثلا به این صورت :


namespace app\test;

use app\test\B;

class A {
private $b;
function __construct() {
$this->b = new B();
}

public function run() {
return $this->b->test();
}
}

اما اگه ایمپورت نمیکردیم باید اینطوری مینوشتیم :


namespace app\test;

class A {
private $b;
function __construct() {
$this->b = new \app\test\B();
}

public function run() {
return $this->b->test();
}
}

djtrex
سه شنبه 26 آبان 1394, 12:19 عصر
پیشنهاد میکنم کتاب Modern PHP رو مطالعه کنید :)
http://it-ebooks.info/book/4781/

--------
namespace ها php 5.3 اومدن : http://php.net/manual/en/migration53.new-features.php
short array syntax هم با php 5.4 اومده: http://php.net/manual/en/migration54.new-features.php
-------
یکی از فواید namespace ها اینه که اگه با composer و psr-4 کار کنید دیگه درگیر این include/require و لود کردن کلاس و معضلات بعدشو و کثیف کاری های همراهش نمیشید چون براتون autoload میکنه.
http://www.php-fig.org/psr/psr-4/

leaping
سه شنبه 26 آبان 1394, 12:57 عصر
تشکر از پاسخ زیبا و شسته رفته دوستان دم همتون گرم :)