# زبان های اسکریپتی > PHP > سوال: منظور از داده های اسکالر چیست؟

## Beginner Programmer

سلام به همه ی دوستان برنامه نویس 
میخواستم بدونم منظور از داده های اسکالر در زبان برنامه نویسی چیه؟
ممنون میشم اگر راهنمائیم کنید
با تشکر"علی"

----------


## ابوذر محمودی

سلام
این اطلاعات مربوط به 3 سال پیشه که تو درس PL خوندم ، اگه اشتباس دوستان  تصحیح کنند.
 اسکالر ها، یک ارزش واحدی نشون میدن ، یعنی میتونن یک نوع مقدار در خودشون ذخیره کنن.
این نوع داده ها اسکالر هستند :
-انواع داده عددی شامل ، صحیح و اعشاری 
-انواع بولین
-کاراکتر ، البته چون دنباله ای از کاراکتر ها یک رشته رو تشکیل میدن ، پس بهتره به جای کاراکتر نوع رشته ای رو بیان کنیم.

و اگر اشتباه نکنم نوع داده اسکالر همون EDT ها هستند که مستقیماَ توسط سخت افزار پشتیبانی میشه.

بقیه داده ها هم ترکیبی از اینهاس دیگه ، مثلا آرایه ، استراکت ، یونیون ، اشاره گرها.

خلاصش اینه که تک مقداری ها اسکالرن و چند مقداری ها مرکب یا ترکیبی.

مثلا یک ساختمان در زبان C میتونه چندین نوع رو در خودش داشته باشه ، پس ترکیبی هست

struct student
{
    int id;    
    char name[25];
    float score;
};

ولی مثلا نوع داده int فقط یک نوع داده اونم فقط عدد میگیره (اسکالر)

برای اینکه مبحث مرتبط با بحث php باشه باید بگم با تابع is_scalar  میتونید بفهمید که متغیری که دارین استفاده میکنین از نوع اسکالر هست یا نه.
تابع is_scalar

----------


## MMSHFE

توی PHP نوع char و به تبع اون، string جزو انواع Scalar محسوب نمیشه. بطور کلی انواعی که میشه روی اونها Scale داشت (مقیاس بندی کرد) رو Scalar میگن. مثلاً میتونیم بگیم 5 دو برابر 2.5 هست ولی نمیتونیم بگیم ali دوبرابر reza هست. نوع boolean هم چون در اصل بصورت عددی (صفر و یک) ذخیره میشه، جزو انواع Scalar محسوب میشه.
http://php.net/manual/en/function.is-scalar.php

----------


## ابوذر محمودی

مطمئن هستید تو php رشته اسکالر نیست؟ بذارین تو سایت php.net جستجو کنم

----------


## ابوذر محمودی

```
PHP supports eight primitive types.

Four scalar types:

boolean
integer
float (floating-point number, aka double)
string
```

اینجا تو سایت http://php.net/ نوشته که از 4 نوع اسکالر پشتیبانی میکنه 
*language.types.intro.php*

حتی تابع is_scalar رو هم الان چک کردم ، برای نوع رشته مقدار یک برمیگردونه.

----------


## MMSHFE

Scalar variables are those containing an integer, float, string or boolean. Types array, object and resource are not scalar.
راستش من طبق این گفته توی لینکی که گذاشتم گفتم چون string هم آرایه از نوع char هست. اما الآن که تست کردم دیدم حق با شماست. البته char قاعدتاً باید Scalar باشه چون بصورت کد کارکتر (int) ذخیره میشه ولی string رو شک داشتم که دیدم اونهم Scalar هست. کد تست:
echo is_scalar('ali'); // output: 1
گویا Document خود سایت PHP هم نیاز به اصلاحات داره. تناقض موجود رو Report کردم.

----------


## ابوذر محمودی

البته تو نوع خود رشته منم شک دارم ، ولی char اسکالره ، چون تو کتاب پرات جزو اسکالرها بود و من منبع معتبر تری برای اثبات خلافش ندارم.
من استدلالم اینه که چون رشته آرایه ای از  کاراکترهاس پس نتیجه اینکه اسکالر نیست، چون خود آرایه طبق همین سایت اسکالر نیست .
شاید واسه برخی زبان ها که مستقیماً نوع رشته ای دارن این صدق نکنه

----------


## ravand

در مورد متغییر های اسکالر در شی گرایی هم خوندم . که با var شروع میشن اونا چه فرقی با اینا دارن؟

----------


## MMSHFE

ارتباطی نداره. var کلاً یک کلمه کلیدی در PHP هست که با کمکش میشه متغیر رو بدون مقداردهی اولیه تعریف کرد. حالا این متغیر اگه مقدارش یکی از انواع مشخص شده از نوع Scalar باشه، میشه اسکالر وگرنه اسکالر نیست.

----------


## ravand

> ارتباطی نداره. var کلاً یک کلمه کلیدی در PHP هست که با کمکش میشه متغیر رو بدون مقداردهی اولیه تعریف کرد. حالا این متغیر اگه مقدارش یکی از انواع مشخص شده از نوع Scalar باشه، میشه اسکالر وگرنه اسکالر نیست.


پس این متغییر هایی که با var شروع میشن اسکالر نیستن؟ و اسمشون چیه؟ من هنوز نفهمیدم دلیل اصلی استفاده از این متغییر ها چی هست؟ شما گفتید بدون مقداردهی اولیه تعریف میشن. یعنی مقداری بهشون ندیم به این شکل؟
var $mo;
آیا منظورتون چیز دیگه ای بود؟
شایدم منظورتون اینه که برای اینکه متغییر از نوع عمومی و خصوصی و... نباشه ما از var استفاده می کنیم؟
مثلا اینطوری؟
 public $mo="mo";
چون به این صورت وقتی داخل کلاس گذاشتم اخطار داد:
$mo="mo";
متشکرم.

----------

