‎‎فضاي ناميPHP Namespaces -‎

Previous >    <Next  

‎‎فضاي نامي درphp دو مشكل را برطرف مي نمايد .

‎ 1‎ـ بااين امكان ميتوان با گروه بندي كلاسهائيكه براي انجام يك كار درارتباط هستند،آنهارا ‎سازماندهي كرد.

‎‎ 2‎ـ باآن ميتوان ازنام يكسان براي بيش از يك كلاس استفاده نمود.

‎براي مثال ممكن است در يك مجموعه از كلاسها كه روي جداول كار ميكنند، سروكار داشته باشيد. ‎كلاس هاي آن ميتواندtable,row و cel باشد .همچنين مجموعه اي ازكلاسهاي مبلمان مثل chair, bed ‎وtable دراين صورت ميتوان با گروه بندي كلاسهاي اين دو فعاليت،آنرا سازماندهي نمود ‎ودرضمن از تداخل دو كلاسtable در انها جلوگيري نمود.

‎‎تعريف فضاي ناميDeclaring a Namespace -‎

‎دستور تعريف فضاي نامي بايد اولين دستور در فايل اسكريپت باشد .فضاي نامي با استفاده ازكي ورد ‎namespace‎‎انجام ميشود .

‎‎فرمت كلي تعريف فضاي نامي مطابق زير:

 <?php 
namespace Html;
?> 

‎نكته ـ همانطوريكه ذكر گرديد، تعريف فضاي نامي بايد اولين دستور فايل مورد استفاده باشد. ‎بعنوان نمونه كد زير نادرست است.

<?php 
echo "Hello World!";
namespace Html;
...
?>

‎‎تعريف ثابت ها، كلاسها وتوابع بايد بدنبال دستور فوق قرار گيرند.

‎مثال ـ ايجاد يك كلاسtable در فضاي ناميHtml ‎در اين مثال ثابت ها،كلاسها وتوابع اعلام شده بفضاي ناميHtml تعلق دارند.

<?php 
namespace Html;
class Table {
  public $title = "";
  public $numRows = 0;
  public function message() {
    echo "<p Table '{$this->title}' has {$this->numRows} rows.</p>";
  }
}
$table = new Table();
$table->title = "My table";
$table->numRows = 5;
?>
<!DOCTYPE html>
<html>
<body>

<?php 
$table->message();
?>

</body>
</html>

--(go to editor for change code and run)

‎براي سازماندهي يشتر ميتوان فضاهاي نامي تودر تو.داشت.بعنوان نمونه فضاي ناميcode داخل ‎فضاي ناميHtml كه فرمت تعريف مطابق زير است .

<?php 
  namespace Code\Html;
?>

‎‎استفاده از فضاهاي ناميUsing Namespaces -‎

‎‎هر كدي كه بدنبال‎namespace‎ قرار گيرد، داخل فضاي نامي منظور ميشود .

‎فضاي ناميHtml داراي دو كلاسtable وrow ميباشد مطابق زيراست . اين اسكريپت در فايلHtml.php ‎ذخيره گرديده است.

<?php 
namespace Html;
class Table {
  public $title = "";
  public $numRows = 0;

  public function message() {
    echo "<p Table '{$this->title}' has {$this->numRows} rows.</p>";
  }
}

class Row {
  public $numCells = 0;
  public function message() {
    echo "<p The row has {$this->numCells} cells.</p>";
  }
}
?>

‎‎مثال ـ استفاده ازكلاسها از فضاي ناميHtml

<?php 
include "Html.php";

$table = new Html\Table();
$table->title = "My table";
$table->numRows = 5;

$row = new Html\Row();
$row->numCells = 3;
?>

<html>
<body>

<?php  $table->message(); ?>
<?php  $row->message(); ?>

</body>

--(go to editor for change code and run)

‎‎هنگاميكه تعدادي كلاس از يك فضاي نامي بطورهمزمان استفاده ميشوند، مشابه زير درمثال بالا

$table = new Html\Table();
$row = new Html\Row();

‎‎ميتوان بدون ذكرHtml\qualifier از كلاسهاي فضاي نامي مشابه زير استفاده كرد.

<?php 
namespace Html;
$table = new Table();
$row = new Row();
?>

‎‎مثال ـ مثال كامل بدون ذكرHtml\qualifier

<?php 
namespace Html;
include "Html.php";

$table = new Table();
$table->title = "My table";
$table->numRows = 5;

$row = new Row();
$row->numCells = 3;
?>

<html>
<body>

<?php  $table->message(); ?>
<?php  $row->message(); ?>

</body>
</html>

                  


--(go to editor for change code and run)

‎‎نام مستعار فضاي ناميNamespace Alias -‎

‎براي استفاده ساده تر از فضاي نامي وكلاسهايش، ميتوان نامي خلاصه تر براي فضاي نامي تعريف ‎نمود .با كلمه كليدي‎use‎ ميتوان براي آن نام مستعار تعريف نمود.

‎‎مثال ـ مطابق زير براي فضاي ناميHtml نام مستعارH درنطز گرفته شده است.

 <?php 
use Html as H;
$table = new H\Table();
?> 

‎‎مثال كامل نام مستعار براي فضاي ناميHtml

<?php 
include "Html2.php";
use Html as H;
$table = new H\Table();
$table->title = "My table";
$table->numRows = 5;
?>

<html>
<body>

<?php  $table->message(); ?>

</body>
</html>

--(go to editor for change code and run)

‎‎مثال ـ در اسكريپت زير گرفتن نام مستعار براي كلاس فضاي نامي را نشان ميدهد.

<?php 
include "Html.php";
use Html\Table as T; // alias for table() class in html
$table = new T();
$table->title = "My table";
$table->numRows = 5;
?>

<html>
<body>

<?php  $table->message(); ?>

</body>
</html>

--(go to editor for change code and run)

‎مثال ـ دراسكريپت زير دو فضاي ناميHtml وcode\Html ايجاد ميشود .در هر دو فضاي نامي ‎كلاسهايtable و row مطابق مثال قبلي تعريف ميشوند .برنامه براساس فضاي نامي code\html ادامه ‎مييابد واجرا ميگردد.

<?php 
namespace Html;
class Table {
  public $title = "";
  public $numRows = 0;

  public function message() {
    echo "<p Html\Table '{$this->title}' has {$this->numRows} rows.</p>";
  }
}

class Row {
  public $numCells = 0;
  public function message() {
    echo "<p The row has {$this->numCells} cells.</p>";
  }
}
namespace code\Html;
class Table {
  public $title = "";
  public $numRows = 0;

  public function message() {
    echo "<p code\Html\Table '{$this->title}' has {$this->numRows} rows.</p>";
  }
}

class Row {
  public $numCells = 0;
  public function message() {
    echo "<p The row has {$this->numCells} cells.</p>";
  }
}
?>
<?php 
namespace code\html;
$table = new Table();
$table->title = "My table";
$table->numRows = 5;

$row = new Row();
$row->numCells = 3;
?>

<html>
<body>

<?php  $table->message(); ?>
<?php  $row->message(); ?>

</body>
</html>

--(go to editor for change code and run)

‎بلوك اسكريپت زيردر مثال فضاي ناميcode\Html را فعال مي نمايد . ونتايج مربوط به آن چاپ ‎ميشود.

<?php 
namespace code\html;
$table = new Table();
$table->title = "My table";
$table->numRows = 5;

$row = new Row();
$row->numCells = 3;
?>

‎‎خودتان فضاي نامي بلوك برنامه را بهHtml تبديل ونتجه اجرا رامشاهده كنيد .


Previous >    <Next