PDA

View Full Version : سوال: استفاده از mysql link resource در کلاس والد



maysam.m
سه شنبه 02 آبان 1391, 17:29 عصر
سلام

من یک کلاس والد و چند تا کلاس فرزند دارم.
کلاس های فرزند موقعی که میخوان کوئری رو اجرا کنند mysql link resource رو از کلاس والد دریافت می کنند و کوئری ها رو اجرا می کنند.
میخواستم بدونم آیا این روش، در استفاده های زیاد مشکلی از نظر سرعت و کارایی دارد؟



class parent1
{

function mysql_connect()
{
return $handle = @new mysqli('localhost', 'root', '', 'test');

}


}

class child1 extends parent1
{
function show_table()
{
$resource = parent::mysql_connect();
$query = $resource->query("SELECT * FROM mytbl");
}


}

colors
سه شنبه 02 آبان 1391, 17:39 عصر
سلام

فکر نکنم این کار درست باشه! قرار نیست که هر بار query درخواست میشه ارتباط مجددا برقرار بشه.

در ضمن تو نسخه های جدید PHP وقتی یک ارتباط برقرار بشه اگه سعی کنید که مجددا ارتباطی برقرار کنید از همون لینک قبلی براتون استفاده میکنه و رو سرعت تاثیری نداره

maysam.m
سه شنبه 02 آبان 1391, 18:31 عصر
فکر نکنم این کار درست باشه! قرار نیست که هر بار query درخواست میشه ارتباط مجددا برقرار بشه.
تست کردم کار میکنه.


این روش چطور؟


class child1 extends parent1
{
private $resource;

function child1()
{
$this->$resource = parent::mysql_connect();
}

function show_table()
{
resource = $this->resource;
$query = $resource->query("SELECT * FROM mytbl");
}


}

توی هر کلاس فرزند یک بار ارتباط رو میگیره و توابع کلاس از همین ارتباط برای اتصال به mysql استفاده میکنند! نظرتون چیه؟ :متفکر:

colors
سه شنبه 02 آبان 1391, 19:12 عصر
تست کردم کار میکنه.

من که نگفتم کار نمیکنه.بله میشه ولی منطقی نیست



این روش چطور؟


class child1 extends parent1
{
private $resource;

function child1()
{
$this->$resource = parent::mysql_connect();
}

function show_table()
{
resource = $this->resource;
$query = $resource->query("SELECT * FROM mytbl");
}


}

توی هر کلاس فرزند یک بار ارتباط رو میگیره و توابع کلاس از همین ارتباط برای اتصال به mysql استفاده میکنند! نظرتون چیه؟ :متفکر:

اصلا اینم منطقی نیست.
به نظر من تو تابع والد یه تابع سازنده بزار که وقتی شیء از اون کلاس یا کلاس های فرزندش ساخته میشه، با بانک ارتباط برقرار کنه. همین
کد زیررو ببین

<?php
class Saman
{

function __construct(){
echo 'Hello';
}

function printText($str){
echo $str;
}

}

class Saman1 extends Saman
{

function printName($name){
echo $name;
}

}

$c = new Saman1;

?>

maysam.m
سه شنبه 02 آبان 1391, 19:35 عصر
خوب تفاوتش چیه که کد منبع در تابع سازنده قرار بگیره؟ در هر صورت با بانک ارتباط میگیره! درسته؟ :متفکر:

colors
سه شنبه 02 آبان 1391, 20:26 عصر
خوب تفاوتش چیه که کد منبع در تابع سازنده قرار بگیره؟ در هر صورت با بانک ارتباط میگیره! درسته؟ :متفکر:

خوب اینجوری فقط یک بار اجرا میشه و حتی لازم هم نیست خودتون اونو فراخوانی کنید. اینجوری شما وقتی کلاسی دارین که با بانک کار میکنه واز این کلاس ارث برده، دیگه مشکل ارتباطو اینارو ندارین.

maysam.m
سه شنبه 02 آبان 1391, 20:47 عصر
خوب اینجوری فقط یک بار اجرا میشه و حتی لازم هم نیست خودتون اونو فراخوانی کنید. اینجوری شما وقتی کلاسی دارین که با بانک کار میکنه واز این کلاس ارث برده، دیگه مشکل ارتباطو اینارو ندارین.

به نظرم خیلی فرق نکرد. :لبخندساده:
تابع کدمنبع رو نمیتونم در تابع سازنده کلاس والد بگذارم چون این کلاس فقط مختص mysql نیست .
تابع کدمنبع در سازنده ی کلاس فرزند قرار میگیره و در هر صورت یک بار فراخوانی میشه و اون کدمنبع رو میتونند همه ی توابع استفاده کنند چه در سازنده کلاس والد چه در یکی از توابع کلاس والد! بنابراین فکر نمیکنم فرقی بکنه! :متفکر:
برای اینکه بفهمیم آیا در هر بار اتصال مجدد برقرار میشه یا نه باید چه کار کنیم؟

colors
چهارشنبه 03 آبان 1391, 00:06 صبح
به نظرم خیلی فرق نکرد. :لبخندساده:
تابع کدمنبع رو نمیتونم در تابع سازنده کلاس والد بگذارم چون این کلاس فقط مختص mysql نیست .
تابع کدمنبع در سازنده ی کلاس فرزند قرار میگیره و در هر صورت یک بار فراخوانی میشه و اون کدمنبع رو میتونند همه ی توابع استفاده کنند چه در سازنده کلاس والد چه در یکی از توابع کلاس والد! بنابراین فکر نمیکنم فرقی بکنه! :متفکر:

من که نگفتم فرق میکنه. میتونید حتی تابع سازنده رو تو کلاس فرزند بزارین.



برای اینکه بفهمیم آیا در هر بار اتصال مجدد برقرار میشه یا نه باید چه کار کنیم؟
همونطور که در پستهای بالا هم ذکر کردم، اگه ارتباطی وجود داشته باشه، ارتباط جدید برقرار نمیشه و از همون ارتباط قبلی و منبعش استفاده میشه.