fix: converted single to triple backticks12 (#36239)
This commit is contained in:
@ -18,38 +18,39 @@ localeTitle: غابة عشوائية
|
|||||||
|
|
||||||
في هذه المسابقة ، يتم منحنا قائمة بأحداث التصادم وخصائصها. سوف نتوقع بعد ذلك ما إذا كان هناك إنحلال τ → 3μ حدث في هذا التصادم. هذا τ → 3μ يفترض في الوقت الحاضر من قبل العلماء ألا يحدث ، وكان الهدف من هذه المسابقة هو اكتشاف τ → 3μ يحدث بشكل متكرر أكثر مما يستطيع العلماء فهمه. كان التحدي هنا هو تصميم مشكلة تعلم آلي لشيء لم يلاحظه أحد من قبل. طور العلماء في CERN التصاميم التالية لتحقيق الهدف. https://www.kaggle.com/c/flavours-of-physics/data
|
في هذه المسابقة ، يتم منحنا قائمة بأحداث التصادم وخصائصها. سوف نتوقع بعد ذلك ما إذا كان هناك إنحلال τ → 3μ حدث في هذا التصادم. هذا τ → 3μ يفترض في الوقت الحاضر من قبل العلماء ألا يحدث ، وكان الهدف من هذه المسابقة هو اكتشاف τ → 3μ يحدث بشكل متكرر أكثر مما يستطيع العلماء فهمه. كان التحدي هنا هو تصميم مشكلة تعلم آلي لشيء لم يلاحظه أحد من قبل. طور العلماء في CERN التصاميم التالية لتحقيق الهدف. https://www.kaggle.com/c/flavours-of-physics/data
|
||||||
|
|
||||||
`#Data Cleaning
|
```python
|
||||||
import pandas as pd
|
#Data Cleaning
|
||||||
data_test = pd.read_csv("test.csv")
|
import pandas as pd
|
||||||
data_train = pd.read_csv("training.csv")
|
data_test = pd.read_csv("test.csv")
|
||||||
data_train = data_train.drop('min_ANNmuon',1)
|
data_train = pd.read_csv("training.csv")
|
||||||
data_train = data_train.drop('production',1)
|
data_train = data_train.drop('min_ANNmuon',1)
|
||||||
data_train = data_train.drop('mass',1)
|
data_train = data_train.drop('production',1)
|
||||||
|
data_train = data_train.drop('mass',1)
|
||||||
#Cleaned data
|
|
||||||
Y = data_train['signal']
|
#Cleaned data
|
||||||
X = data_train.drop('signal',1)
|
Y = data_train['signal']
|
||||||
|
X = data_train.drop('signal',1)
|
||||||
#adaboost
|
|
||||||
from sklearn.ensemble import AdaBoostClassifier
|
#adaboost
|
||||||
from sklearn.tree import DecisionTreeClassifier
|
from sklearn.ensemble import AdaBoostClassifier
|
||||||
seed = 9001 #this ones over 9000!!!
|
from sklearn.tree import DecisionTreeClassifier
|
||||||
boosted_tree = AdaBoostClassifier(DecisionTreeClassifier(max_depth=1), algorithm="SAMME",
|
seed = 9001 #this ones over 9000!!!
|
||||||
n_estimators=50, random_state = seed)
|
boosted_tree = AdaBoostClassifier(DecisionTreeClassifier(max_depth=1), algorithm="SAMME",
|
||||||
model = boosted_tree.fit(X, Y)
|
n_estimators=50, random_state = seed)
|
||||||
|
model = boosted_tree.fit(X, Y)
|
||||||
predictions = model.predict(data_test)
|
|
||||||
print(predictions)
|
predictions = model.predict(data_test)
|
||||||
#Note we can't really validate this data since we don't have an array of "right answers"
|
print(predictions)
|
||||||
|
#Note we can't really validate this data since we don't have an array of "right answers"
|
||||||
#stochastic gradient boosting
|
|
||||||
from sklearn.ensemble import GradientBoostingClassifier
|
#stochastic gradient boosting
|
||||||
gradient_boosted_tree = GradientBoostingClassifier(n_estimators=50, random_state=seed)
|
from sklearn.ensemble import GradientBoostingClassifier
|
||||||
model2 = gradient_boosted_tree.fit(X,Y)
|
gradient_boosted_tree = GradientBoostingClassifier(n_estimators=50, random_state=seed)
|
||||||
|
model2 = gradient_boosted_tree.fit(X,Y)
|
||||||
predictions2 = model2.predict(data_test)
|
|
||||||
print(predictions2)
|
predictions2 = model2.predict(data_test)
|
||||||
`
|
print(predictions2)
|
||||||
|
```
|
||||||
|
|
||||||
#### معلومات اكثر:
|
#### معلومات اكثر:
|
||||||
|
|
||||||
|
@ -8,23 +8,26 @@ localeTitle: تحويل بين راديان ودرجات
|
|||||||
|
|
||||||
يمكن استخدام الصيغ التالية للتحويل بين الراديان والدرجات:
|
يمكن استخدام الصيغ التالية للتحويل بين الراديان والدرجات:
|
||||||
|
|
||||||
`r = d * (π / 180)
|
```
|
||||||
|
r = d * (π / 180)
|
||||||
d = r * (180 / π)
|
|
||||||
|
d = r * (180 / π)
|
||||||
where r is the angle in radians and d is the angle in degrees.
|
|
||||||
`
|
where r is the angle in radians and d is the angle in degrees.
|
||||||
|
```
|
||||||
|
|
||||||
### أمثلة
|
### أمثلة
|
||||||
|
|
||||||
تحويل 2π / 3 راديان إلى درجات:
|
تحويل 2π / 3 راديان إلى درجات:
|
||||||
|
|
||||||
`2π/3 * 180/π = 360π/3π = 360/3 = 120 degrees
|
```
|
||||||
`
|
2π/3 * 180/π = 360π/3π = 360/3 = 120 degrees
|
||||||
|
```
|
||||||
|
|
||||||
تحويل 30 درجة إلى راديان:
|
تحويل 30 درجة إلى راديان:
|
||||||
|
|
||||||
`30 * π/180 = 30π/180 = π/6 or (1/6)π radians
|
```
|
||||||
|
30 * π/180 = 30π/180 = π/6 or (1/6)π radians
|
||||||
Note: Radians are usually expressed in terms of π instead of a rounded decimal as this form represents the actual value rather than an approximation.
|
|
||||||
`
|
Note: Radians are usually expressed in terms of π instead of a rounded decimal as this form represents the actual value rather than an approximation.
|
||||||
|
```
|
@ -22,10 +22,11 @@ localeTitle: تحويل مباشرة من ثنائي إلى سداسي عشري
|
|||||||
|
|
||||||
تحويل الرقم الثنائي 01101000000001 إلى رقم سداسي عشري.
|
تحويل الرقم الثنائي 01101000000001 إلى رقم سداسي عشري.
|
||||||
|
|
||||||
`1. 01101000000001 => 01|1010|0000|0001
|
```
|
||||||
2. 01|1010|0000|0001 => 0001|1010|0000|0001
|
1. 01101000000001 => 01|1010|0000|0001
|
||||||
3. 0001|1010|0000|0001 => 1A01
|
2. 01|1010|0000|0001 => 0001|1010|0000|0001
|
||||||
`
|
3. 0001|1010|0000|0001 => 1A01
|
||||||
|
```
|
||||||
|
|
||||||
#### معلومات اكثر:
|
#### معلومات اكثر:
|
||||||
|
|
||||||
|
@ -14,40 +14,42 @@ localeTitle: تحويل من عشري إلى ثنائي
|
|||||||
|
|
||||||
تحويل الرقم العشري 30 إلى ثنائي.
|
تحويل الرقم العشري 30 إلى ثنائي.
|
||||||
|
|
||||||
`30 / 2 = 15 r 0
|
```
|
||||||
15 / 2 = 7 r 1
|
30 / 2 = 15 r 0
|
||||||
7 / 2 = 3 r 1
|
15 / 2 = 7 r 1
|
||||||
3 / 2 = 1 r 1
|
7 / 2 = 3 r 1
|
||||||
1 / 2 = 0 r 1
|
3 / 2 = 1 r 1
|
||||||
|
1 / 2 = 0 r 1
|
||||||
Writing out the remainders bottom to top gives you the bit pattern:
|
|
||||||
|
Writing out the remainders bottom to top gives you the bit pattern:
|
||||||
11110
|
|
||||||
|
11110
|
||||||
Checking your answer by converting the binary number back to decimal:
|
|
||||||
|
Checking your answer by converting the binary number back to decimal:
|
||||||
(1*2^4)+(1*2^3)+(1*2^2)+(1*2^1)+(0*2^0) = 30
|
|
||||||
|
(1*2^4)+(1*2^3)+(1*2^2)+(1*2^1)+(0*2^0) = 30
|
||||||
So your answer is correct.
|
|
||||||
`
|
So your answer is correct.
|
||||||
|
```
|
||||||
|
|
||||||
تحويل الرقم العشري 116 إلى ثنائي.
|
تحويل الرقم العشري 116 إلى ثنائي.
|
||||||
|
|
||||||
`116 / 2 = 58 r 0
|
```
|
||||||
58 / 2 = 29 r 0
|
116 / 2 = 58 r 0
|
||||||
29 / 2 = 14 r 1
|
58 / 2 = 29 r 0
|
||||||
14 / 2 = 7 r 0
|
29 / 2 = 14 r 1
|
||||||
7 / 2 = 3 r 1
|
14 / 2 = 7 r 0
|
||||||
3 / 2 = 1 r 1
|
7 / 2 = 3 r 1
|
||||||
1 / 2 = 0 r 1
|
3 / 2 = 1 r 1
|
||||||
|
1 / 2 = 0 r 1
|
||||||
Writing out the remainders bottom to top gives you the bit pattern:
|
|
||||||
|
Writing out the remainders bottom to top gives you the bit pattern:
|
||||||
1110100
|
|
||||||
|
1110100
|
||||||
Checking your answer by converting the binary number back to decimal:
|
|
||||||
|
Checking your answer by converting the binary number back to decimal:
|
||||||
(1*2^6)+(1*2^5)+(1*2^4)+(0*2^3)+(1*2^2)+(0*2^1)+(0*2^0) = 116
|
|
||||||
|
(1*2^6)+(1*2^5)+(1*2^4)+(0*2^3)+(1*2^2)+(0*2^1)+(0*2^0) = 116
|
||||||
So your answer is correct.
|
|
||||||
`
|
So your answer is correct.
|
||||||
|
```
|
@ -14,13 +14,15 @@ Centi- (رمز c) هي بادئة وحدة في النظام المتري تدل
|
|||||||
|
|
||||||
في الصيغة التالية ، يتم تصنيف الوحدات مع أقواس \[\] حولها
|
في الصيغة التالية ، يتم تصنيف الوحدات مع أقواس \[\] حولها
|
||||||
|
|
||||||
`[cm] / 100 = [m]
|
```
|
||||||
`
|
[cm] / 100 = [m]
|
||||||
|
```
|
||||||
|
|
||||||
إذا أدخلت القيمة التي لديك ، دعنا نقول 50 سم ، فسيتم حسابها على النحو التالي:
|
إذا أدخلت القيمة التي لديك ، دعنا نقول 50 سم ، فسيتم حسابها على النحو التالي:
|
||||||
|
|
||||||
`50[cm] / 100 = 0.5[m]
|
```
|
||||||
`
|
50[cm] / 100 = 0.5[m]
|
||||||
|
```
|
||||||
|
|
||||||
نتيجة حساب إرجاع قيمة 0.5 متر ، فإن كمية متر 50 سنتيمتر هو.
|
نتيجة حساب إرجاع قيمة 0.5 متر ، فإن كمية متر 50 سنتيمتر هو.
|
||||||
|
|
||||||
@ -32,16 +34,17 @@ Centi- (رمز c) هي بادئة وحدة في النظام المتري تدل
|
|||||||
|
|
||||||
### الترميز
|
### الترميز
|
||||||
|
|
||||||
`function convertCentimeterToMeter (cm) {
|
```js
|
||||||
return ( cm / 100 );
|
function convertCentimeterToMeter (cm) {
|
||||||
}
|
return ( cm / 100 );
|
||||||
|
}
|
||||||
// Set some example measurements
|
|
||||||
var lengthInCm = 300;
|
// Set some example measurements
|
||||||
var lengthInM;
|
var lengthInCm = 300;
|
||||||
|
var lengthInM;
|
||||||
lengthInM = convertCentimeterToMeter(lengthInCm); // 3
|
|
||||||
`
|
lengthInM = convertCentimeterToMeter(lengthInCm); // 3
|
||||||
|
```
|
||||||
|
|
||||||
### معلومات اكثر:
|
### معلومات اكثر:
|
||||||
|
|
||||||
|
@ -19,10 +19,12 @@ localeTitle: تحويل وحدات دقيقة إلى ساعات
|
|||||||
|
|
||||||
التحويل من الوقت بالدقائق إلى الوقت بالساعة:
|
التحويل من الوقت بالدقائق إلى الوقت بالساعة:
|
||||||
|
|
||||||
`90 minutes = (90 / 60) hours = 1.5 hours
|
```
|
||||||
`
|
90 minutes = (90 / 60) hours = 1.5 hours
|
||||||
|
```
|
||||||
|
|
||||||
التحويل من الوقت بالساعة إلى الوقت بالدقائق:
|
التحويل من الوقت بالساعة إلى الوقت بالدقائق:
|
||||||
|
|
||||||
`24 hours = (24 * 60) minutes = 1440 minutes
|
```
|
||||||
`
|
24 hours = (24 * 60) minutes = 1440 minutes
|
||||||
|
```
|
@ -22,10 +22,11 @@ localeTitle: تركيبات
|
|||||||
|
|
||||||
تعد التوليفات مفيدة جدًا عندما تريد حل المشكلات التجميعية مثل المشاكل التالية:
|
تعد التوليفات مفيدة جدًا عندما تريد حل المشكلات التجميعية مثل المشاكل التالية:
|
||||||
|
|
||||||
`Compute the probability to obtain a poker from
|
```
|
||||||
a standard fifty-two card deck drawing 5 cards
|
Compute the probability to obtain a poker from
|
||||||
at the same time
|
a standard fifty-two card deck drawing 5 cards
|
||||||
`
|
at the same time
|
||||||
|
```
|
||||||
|
|
||||||
من أجل حل هذه المشكلة البسيطة ، تحتاج إلى حساب عدد 5 أيدي بطاقة ممكن باستخدام مجموعات:
|
من أجل حل هذه المشكلة البسيطة ، تحتاج إلى حساب عدد 5 أيدي بطاقة ممكن باستخدام مجموعات:
|
||||||
|
|
||||||
|
@ -30,37 +30,41 @@ private int CalculatePoweredArray (int int، int \[\] arr) { var poweredArray =
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
`Calling the function with a power of 3 will give these results:
|
```
|
||||||
[1, 8, 27, 64, 125]
|
Calling the function with a power of 3 will give these results:
|
||||||
|
[1, 8, 27, 64, 125]
|
||||||
Documentation reference: <a href='https://msdn.microsoft.com/en-us/library/system.math(v=vs.110' target='_blank' rel='nofollow'>MSDN</a>.aspx)
|
|
||||||
|
Documentation reference: <a href='https://msdn.microsoft.com/en-us/library/system.math(v=vs.110' target='_blank' rel='nofollow'>MSDN</a>.aspx)
|
||||||
#### JavaScript
|
|
||||||
With Node.js
|
#### JavaScript
|
||||||
`
|
With Node.js
|
||||||
|
```
|
||||||
|
|
||||||
جافا سكريبت var math = requires ('mathjs')؛
|
جافا سكريبت var math = requires ('mathjs')؛
|
||||||
|
|
||||||
`In the browser
|
```
|
||||||
`
|
In the browser
|
||||||
|
```
|
||||||
|
|
||||||
أتش تي أم أل
|
أتش تي أم أل
|
||||||
|
|
||||||
// use the math.js libary math.sqrt(-4); // result: 2i
|
// use the math.js libary math.sqrt(-4); // result: 2i
|
||||||
|
|
||||||
`Documentation reference: <a href='http://mathjs.org/docs/index.html' target='_blank' rel='nofollow'>Math.js documentation</a>
|
```
|
||||||
|
Documentation reference: <a href='http://mathjs.org/docs/index.html' target='_blank' rel='nofollow'>Math.js documentation</a>
|
||||||
#### C++
|
|
||||||
`
|
#### C++
|
||||||
|
```
|
||||||
|
|
||||||
حزب الشعب الكمبودي
|
حزب الشعب الكمبودي
|
||||||
|
|
||||||
# تتضمن
|
# تتضمن
|
||||||
|
|
||||||
`Documentation reference: <a href='http://www.cplusplus.com/reference/cmath/' target='_blank' rel='nofollow'>cplusplus reference</a>
|
```
|
||||||
|
Documentation reference: <a href='http://www.cplusplus.com/reference/cmath/' target='_blank' rel='nofollow'>cplusplus reference</a>
|
||||||
#### Python
|
|
||||||
`
|
#### Python
|
||||||
|
```
|
||||||
|
|
||||||
الثعبان
|
الثعبان
|
||||||
|
|
||||||
@ -73,10 +77,11 @@ private int CalculatePoweredArray (int int، int \[\] arr) { var poweredArray =
|
|||||||
|
|
||||||
> > > استيراد numpy كما np np.zeros ((3،4))
|
> > > استيراد numpy كما np np.zeros ((3،4))
|
||||||
|
|
||||||
`This returns a 3x4 array populated with 0s.
|
```
|
||||||
|
This returns a 3x4 array populated with 0s.
|
||||||
#### Java
|
|
||||||
`
|
#### Java
|
||||||
|
```
|
||||||
|
|
||||||
جافا استيراد java.lang.Math
|
جافا استيراد java.lang.Math
|
||||||
|
|
||||||
|
@ -14,12 +14,13 @@ _هنا في المثال المتغير b هو القاعدة بينما الم
|
|||||||
|
|
||||||
مثال على سجلات في بيثون:
|
مثال على سجلات في بيثون:
|
||||||
|
|
||||||
`import math
|
```python
|
||||||
|
import math
|
||||||
# math.log(value, base) - outputs exponent
|
|
||||||
math.log(100, 10) #outputs 2
|
# math.log(value, base) - outputs exponent
|
||||||
math.log(2, 2) #outputs 1
|
math.log(100, 10) #outputs 2
|
||||||
`
|
math.log(2, 2) #outputs 1
|
||||||
|
```
|
||||||
|
|
||||||
#### مصادر:
|
#### مصادر:
|
||||||
|
|
||||||
|
@ -6,54 +6,59 @@ localeTitle: يعني متوسط الوضع والمدى
|
|||||||
|
|
||||||
يستخدم الإحصائيون وعلماء الرياضيات المتوسط والوسيط والوضع والنطاق لمعرفة معلومات حول مجموعة من الأرقام.
|
يستخدم الإحصائيون وعلماء الرياضيات المتوسط والوسيط والوضع والنطاق لمعرفة معلومات حول مجموعة من الأرقام.
|
||||||
|
|
||||||
`Example set:
|
```
|
||||||
|
Example set:
|
||||||
5, -4, 11, 5, 5, 20, 8.5, 11
|
|
||||||
`
|
5, -4, 11, 5, 5, 20, 8.5, 11
|
||||||
|
```
|
||||||
|
|
||||||
لحساب **نطاق** مجموعة ، خذ الرقم الأكبر ، والرمز x ، وأقل عدد ، والرمز y ، وحساب xy. سيعطي النطاق إشارة إلى مدى انتشار الأرقام.
|
لحساب **نطاق** مجموعة ، خذ الرقم الأكبر ، والرمز x ، وأقل عدد ، والرمز y ، وحساب xy. سيعطي النطاق إشارة إلى مدى انتشار الأرقام.
|
||||||
|
|
||||||
`Smallest value: -4
|
```
|
||||||
Largest value: 20
|
Smallest value: -4
|
||||||
|
Largest value: 20
|
||||||
20 - (-4) = 24
|
|
||||||
|
20 - (-4) = 24
|
||||||
The range is 24
|
|
||||||
`
|
The range is 24
|
||||||
|
```
|
||||||
|
|
||||||
لحساب **المتوسط** ، أضف جميع الأرقام معًا وانقسم على إجمالي عدد العناصر في المجموعة. هذا هو المقصود عادة عند مناقشة "المتوسط".
|
لحساب **المتوسط** ، أضف جميع الأرقام معًا وانقسم على إجمالي عدد العناصر في المجموعة. هذا هو المقصود عادة عند مناقشة "المتوسط".
|
||||||
|
|
||||||
`5 + (-4) + 11 + 5 + 5 + 20 + 8.5 + 11 = 61.5
|
```
|
||||||
|
5 + (-4) + 11 + 5 + 5 + 20 + 8.5 + 11 = 61.5
|
||||||
Sum: 61.5
|
|
||||||
Count: 8
|
Sum: 61.5
|
||||||
|
Count: 8
|
||||||
61.5 / 8 = 7.6875
|
|
||||||
|
61.5 / 8 = 7.6875
|
||||||
The mean is 7.6875
|
|
||||||
`
|
The mean is 7.6875
|
||||||
|
```
|
||||||
|
|
||||||
لحساب **الوضع** ، ابحث عن الرقم الذي يتم تكراره بشكل متكرر. على سبيل المثال ، بالنسبة للأعداد 1،2،3،4،5،6،7،7،7 سيكون الوضع 7 لأن هناك ثلاثة 7s في المجموعة ، وهو أعلى من أي رقم آخر.
|
لحساب **الوضع** ، ابحث عن الرقم الذي يتم تكراره بشكل متكرر. على سبيل المثال ، بالنسبة للأعداد 1،2،3،4،5،6،7،7،7 سيكون الوضع 7 لأن هناك ثلاثة 7s في المجموعة ، وهو أعلى من أي رقم آخر.
|
||||||
|
|
||||||
`Put the set in order so it's easier to see how
|
```
|
||||||
many of each value there are:
|
Put the set in order so it's easier to see how
|
||||||
|
many of each value there are:
|
||||||
-4, 5, 5, 5, 8.5, 11, 11, 20
|
|
||||||
|
-4, 5, 5, 5, 8.5, 11, 11, 20
|
||||||
5 appears three times, 11 appears twice and
|
|
||||||
everything else appears once.
|
5 appears three times, 11 appears twice and
|
||||||
|
everything else appears once.
|
||||||
The mode is 5
|
|
||||||
`
|
The mode is 5
|
||||||
|
```
|
||||||
|
|
||||||
لحساب **المتوسط** ، قم بترتيب كافة الأرقام بترتيب متزايد وقم بتخطي أعلى وأعلى رقم حتى يظهر رقم واحد أو رقمين فقط. إذا كان هناك رقم واحد متبقٍ ، فهذا الرقم هو الوسيط. إذا كان هناك رقمان ، فقم بإضافة رقمين ثم قسّم على 2 للحصول على الوسيط. على سبيل المثال ، في 1،2،3،4،5،6،7،7،7 سيكون المتوسط 5.
|
لحساب **المتوسط** ، قم بترتيب كافة الأرقام بترتيب متزايد وقم بتخطي أعلى وأعلى رقم حتى يظهر رقم واحد أو رقمين فقط. إذا كان هناك رقم واحد متبقٍ ، فهذا الرقم هو الوسيط. إذا كان هناك رقمان ، فقم بإضافة رقمين ثم قسّم على 2 للحصول على الوسيط. على سبيل المثال ، في 1،2،3،4،5،6،7،7،7 سيكون المتوسط 5.
|
||||||
|
|
||||||
`First, put the set in order:
|
```
|
||||||
|
First, put the set in order:
|
||||||
-4, 5, 5, 5, 8.5, 11, 11, 20
|
|
||||||
|
-4, 5, 5, 5, 8.5, 11, 11, 20
|
||||||
The third 5 and 8.5 are the middle values...
|
|
||||||
(5 + 8.5) / 2 = 6.75
|
The third 5 and 8.5 are the middle values...
|
||||||
|
(5 + 8.5) / 2 = 6.75
|
||||||
The median is 6.75
|
|
||||||
`
|
The median is 6.75
|
||||||
|
```
|
@ -8,15 +8,15 @@ Font Awesome هي مكتبة ملائمة من الرموز. هذه الرموز
|
|||||||
|
|
||||||
هيريس كيف تضيف أيقونة:
|
هيريس كيف تضيف أيقونة:
|
||||||
|
|
||||||
`
|
```html
|
||||||
<i class="fa fa-thumbs-up"></i>
|
<i class="fa fa-thumbs-up"></i>
|
||||||
`
|
```
|
||||||
|
|
||||||
إليك كيفية إدراج هذا الرمز على زر:
|
إليك كيفية إدراج هذا الرمز على زر:
|
||||||
|
|
||||||
`
|
```html
|
||||||
<button class="btn btn-block btn-primary"><i class="fa fa-thumbs-up"></i> Like</button>
|
<button class="btn btn-block btn-primary"><i class="fa fa-thumbs-up"></i> Like</button>
|
||||||
`
|
```
|
||||||
|
|
||||||
#### معلومات اكثر:
|
#### معلومات اكثر:
|
||||||
|
|
||||||
|
@ -13,10 +13,11 @@ localeTitle: تكبير الحرف الأول من سلسلة
|
|||||||
|
|
||||||
يجب عليك استخدام طريقة [charAt ()](http://forum.freecodecamp.com/t/javascript-string-prototype-charat/15932) ، في _الفهرس 0_ ، لتحديد الحرف الأول من السلسلة.
|
يجب عليك استخدام طريقة [charAt ()](http://forum.freecodecamp.com/t/javascript-string-prototype-charat/15932) ، في _الفهرس 0_ ، لتحديد الحرف الأول من السلسلة.
|
||||||
|
|
||||||
`var string = "freeCodecamp";
|
```javascript
|
||||||
|
var string = "freeCodecamp";
|
||||||
string.charAt(0); // Returns "f"
|
|
||||||
`
|
string.charAt(0); // Returns "f"
|
||||||
|
```
|
||||||
|
|
||||||
> ملاحظة: يفضل استخدام `charAt` `[ ]` ( [تدوين قوس](http://forum.freecodecamp.com/t/javascript-string-prototype-touppercase/15950) ) باسم `str.charAt(0)` إرجاع سلسلة فارغة ( _`''`_ ) لـ `str = ''` بدلاً من `undefined` في حالة `''[0]` .
|
> ملاحظة: يفضل استخدام `charAt` `[ ]` ( [تدوين قوس](http://forum.freecodecamp.com/t/javascript-string-prototype-touppercase/15950) ) باسم `str.charAt(0)` إرجاع سلسلة فارغة ( _`''`_ ) لـ `str = ''` بدلاً من `undefined` في حالة `''[0]` .
|
||||||
|
|
||||||
@ -24,48 +25,52 @@ localeTitle: تكبير الحرف الأول من سلسلة
|
|||||||
|
|
||||||
يمكنك استخدام أسلوب [toUpperCase ()](http://forum.freecodecamp.com/t/javascript-string-prototype-touppercase/15950) وتحويل سلسلة الاستدعاء إلى الحالة العليا.
|
يمكنك استخدام أسلوب [toUpperCase ()](http://forum.freecodecamp.com/t/javascript-string-prototype-touppercase/15950) وتحويل سلسلة الاستدعاء إلى الحالة العليا.
|
||||||
|
|
||||||
`var string = "freeCodecamp";
|
```javascript
|
||||||
|
var string = "freeCodecamp";
|
||||||
string.charAt(0).toUpperCase(); // Returns "F"
|
|
||||||
`
|
string.charAt(0).toUpperCase(); // Returns "F"
|
||||||
|
```
|
||||||
|
|
||||||
## 3\. الحصول على البقية من السلسلة
|
## 3\. الحصول على البقية من السلسلة
|
||||||
|
|
||||||
يمكنك استخدام طريقة [شريحة ()](https://github.com/freecodecamp/freecodecamp/wiki/js-array-prototype-slice) والحصول على الباقي من السلسلة (من الحرف الثاني ، _الفهرس 1_ ، إلى نهاية السلسلة).
|
يمكنك استخدام طريقة [شريحة ()](https://github.com/freecodecamp/freecodecamp/wiki/js-array-prototype-slice) والحصول على الباقي من السلسلة (من الحرف الثاني ، _الفهرس 1_ ، إلى نهاية السلسلة).
|
||||||
|
|
||||||
`var string = "freeCodecamp";
|
```javascript
|
||||||
|
var string = "freeCodecamp";
|
||||||
string.slice(1); // Returns "reeCodecamp"
|
|
||||||
`
|
string.slice(1); // Returns "reeCodecamp"
|
||||||
|
```
|
||||||
|
|
||||||
## 4\. قم بإرجاع النتيجة بإضافة الحرف الأول وبقية السلسلة
|
## 4\. قم بإرجاع النتيجة بإضافة الحرف الأول وبقية السلسلة
|
||||||
|
|
||||||
يجب إنشاء دالة تقبل سلسلة كوسيطة فقط وترجع سلسلة الأحرف الأولى `string.charAt(0).toUpperCase()` والباقي من السلسلة `string.slice(1)` .
|
يجب إنشاء دالة تقبل سلسلة كوسيطة فقط وترجع سلسلة الأحرف الأولى `string.charAt(0).toUpperCase()` والباقي من السلسلة `string.slice(1)` .
|
||||||
|
|
||||||
`var string = "freeCodecamp";
|
```javascript
|
||||||
|
var string = "freeCodecamp";
|
||||||
function capitalizeFirstLetter(str) {
|
|
||||||
return str.charAt(0).toUpperCase() + str.slice(1);
|
function capitalizeFirstLetter(str) {
|
||||||
}
|
return str.charAt(0).toUpperCase() + str.slice(1);
|
||||||
|
}
|
||||||
capitalizeFirstLetter(string); // Returns "FreeCodecamp"
|
|
||||||
`
|
capitalizeFirstLetter(string); // Returns "FreeCodecamp"
|
||||||
|
```
|
||||||
|
|
||||||
أو يمكنك إضافة هذه الوظيفة إلى `String.prototype` لاستخدامها مباشرةً على سلسلة باستخدام التعليمة البرمجية التالية ( _بحيث لا يمكن حساب هذه الطريقة ولكن يمكن استبدالها أو حذفها لاحقًا_ ):
|
أو يمكنك إضافة هذه الوظيفة إلى `String.prototype` لاستخدامها مباشرةً على سلسلة باستخدام التعليمة البرمجية التالية ( _بحيث لا يمكن حساب هذه الطريقة ولكن يمكن استبدالها أو حذفها لاحقًا_ ):
|
||||||
|
|
||||||
`var string = "freeCodecamp";
|
```javascript
|
||||||
|
var string = "freeCodecamp";
|
||||||
/* this is how methods are defined in prototype of any built-in Object */
|
|
||||||
Object.defineProperty(String.prototype, 'capitalizeFirstLetter', {
|
/* this is how methods are defined in prototype of any built-in Object */
|
||||||
value: function () {
|
Object.defineProperty(String.prototype, 'capitalizeFirstLetter', {
|
||||||
return this.charAt(0).toUpperCase() + this.slice(1);
|
value: function () {
|
||||||
},
|
return this.charAt(0).toUpperCase() + this.slice(1);
|
||||||
writable: true, // so that one can overwrite it later
|
},
|
||||||
configurable: true // so that it can be deleted later
|
writable: true, // so that one can overwrite it later
|
||||||
});
|
configurable: true // so that it can be deleted later
|
||||||
|
});
|
||||||
string.capitalizeFirstLetter(); // Returns "FreeCodecamp"
|
|
||||||
`
|
string.capitalizeFirstLetter(); // Returns "FreeCodecamp"
|
||||||
|
```
|
||||||
|
|
||||||
### مصدر
|
### مصدر
|
||||||
|
|
||||||
|
@ -22,7 +22,8 @@ localeTitle: كيفية إعادة توجيه صفحة ويب
|
|||||||
</form>
|
</form>
|
||||||
`
|
`
|
||||||
|
|
||||||
`There is another option if you just want to change the page as soon as they reach that page:
|
```
|
||||||
`
|
There is another option if you just want to change the page as soon as they reach that page:
|
||||||
|
```
|
||||||
|
|
||||||
جافا سكريبت window.location.assign ( "HTTPS: //www.yournewwebsite.fakewebsite")؛ \`\` \` استبدال موقع الويب بموقعك على الويب. ينبغي للمرء أن يذهب داخل ملف جافا سكريبت.
|
جافا سكريبت window.location.assign ( "HTTPS: //www.yournewwebsite.fakewebsite")؛ \`\` \` استبدال موقع الويب بموقعك على الويب. ينبغي للمرء أن يذهب داخل ملف جافا سكريبت.
|
@ -30,9 +30,9 @@ localeTitle: HTML و CSS Cheat Sheet
|
|||||||
|
|
||||||
جرب قيمًا مختلفة لمعرفة كيفية تأثيرها على div وأكثر في html
|
جرب قيمًا مختلفة لمعرفة كيفية تأثيرها على div وأكثر في html
|
||||||
|
|
||||||
`
|
```html
|
||||||
<div id="divName" class="container-fluid">
|
<div id="divName" class="container-fluid">
|
||||||
`
|
```
|
||||||
|
|
||||||
## محاذاة عمودية (لسطر واحد من النص)
|
## محاذاة عمودية (لسطر واحد من النص)
|
||||||
|
|
||||||
|
@ -6,15 +6,17 @@ localeTitle: تعرف على Jsonp
|
|||||||
|
|
||||||
JSONP لتقف على "JSON مع الحشو". لنفترض أنك تريد تقديم طلبات AJAX إلى نطاق مختلف. حسنا ، لا يمكنك القيام بذلك مع XMLHttpRequest ، كما تفعل عادة ، ولكن يمكنك القيام بذلك مع علامات البرنامج النصي ، كما رأينا [على StackOverflow](https://stackoverflow.com/questions/2067472/what-is-jsonp-all-about) :
|
JSONP لتقف على "JSON مع الحشو". لنفترض أنك تريد تقديم طلبات AJAX إلى نطاق مختلف. حسنا ، لا يمكنك القيام بذلك مع XMLHttpRequest ، كما تفعل عادة ، ولكن يمكنك القيام بذلك مع علامات البرنامج النصي ، كما رأينا [على StackOverflow](https://stackoverflow.com/questions/2067472/what-is-jsonp-all-about) :
|
||||||
|
|
||||||
`script = document.createElement('script');
|
```javascript
|
||||||
script.type = 'text/javascript';
|
script = document.createElement('script');
|
||||||
script.src = 'http://www.someWebApiServer.com/some-data';
|
script.type = 'text/javascript';
|
||||||
`
|
script.src = 'http://www.someWebApiServer.com/some-data';
|
||||||
|
```
|
||||||
|
|
||||||
ولكن هذا قبيح ، والآن لدينا للحصول على عناصر من JSON من علامة النصي ، الإجمالي. لحسن الحظ ، كان منشئو JSONP يفكرون في المستقبل ، لذا بدلاً من وضع نصوصنا كما فعلنا أعلاه ، نقوم بذلك:
|
ولكن هذا قبيح ، والآن لدينا للحصول على عناصر من JSON من علامة النصي ، الإجمالي. لحسن الحظ ، كان منشئو JSONP يفكرون في المستقبل ، لذا بدلاً من وضع نصوصنا كما فعلنا أعلاه ، نقوم بذلك:
|
||||||
|
|
||||||
`script.src = 'http://www.someWebApiServer.com/some-data?callback=my_callback';
|
```javascript
|
||||||
`
|
script.src = 'http://www.someWebApiServer.com/some-data?callback=my_callback';
|
||||||
|
```
|
||||||
|
|
||||||
يؤدي هذا إلى معاودة الاتصال التلقائي بعد تحميل البيانات ، مما يؤدي إلى إنشاء وظيفة بالبيانات المطلوبة داخلها.
|
يؤدي هذا إلى معاودة الاتصال التلقائي بعد تحميل البيانات ، مما يؤدي إلى إنشاء وظيفة بالبيانات المطلوبة داخلها.
|
||||||
|
|
||||||
|
@ -8,17 +8,19 @@ localeTitle: اختبار مع Chaijs
|
|||||||
|
|
||||||
يمكنك تثبيت Chai في مشروعك من خلال npm.
|
يمكنك تثبيت Chai في مشروعك من خلال npm.
|
||||||
|
|
||||||
`npm install chai
|
```
|
||||||
`
|
npm install chai
|
||||||
|
```
|
||||||
|
|
||||||
##### المؤيدة للطرف
|
##### المؤيدة للطرف
|
||||||
|
|
||||||
إضافة Chai في devDependencies of _package.json_ ، باستخدام \* كعلامة إصدار. بهذه الطريقة ، لديك دائمًا أحدث إصدار.
|
إضافة Chai في devDependencies of _package.json_ ، باستخدام \* كعلامة إصدار. بهذه الطريقة ، لديك دائمًا أحدث إصدار.
|
||||||
|
|
||||||
`"devDependencies": {
|
```
|
||||||
"chai": "*"
|
"devDependencies": {
|
||||||
}
|
"chai": "*"
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### كيف تستعمل
|
### كيف تستعمل
|
||||||
|
|
||||||
|
@ -14,10 +14,11 @@ localeTitle: إعداد تطوير تطبيق Cordova iOS للنشر
|
|||||||
|
|
||||||
ابدأ بفتح الوحدة الطرفية وإنشاء مشروع Cordova جديد (استخدم sudo فقط إذا كان لديك مشكلات في الإذن ، أي أخطاء EACCESS):
|
ابدأ بفتح الوحدة الطرفية وإنشاء مشروع Cordova جديد (استخدم sudo فقط إذا كان لديك مشكلات في الإذن ، أي أخطاء EACCESS):
|
||||||
|
|
||||||
`sudo cordova create iosdemo
|
```
|
||||||
cd iosdemo
|
sudo cordova create iosdemo
|
||||||
sudo cordova platform add ios
|
cd iosdemo
|
||||||
`
|
sudo cordova platform add ios
|
||||||
|
```
|
||||||
|
|
||||||
في وقت كتابة هذا الدليل ، فإن هذا الإصدار من منصة Cordova iOS هو: 4.3.1
|
في وقت كتابة هذا الدليل ، فإن هذا الإصدار من منصة Cordova iOS هو: 4.3.1
|
||||||
|
|
||||||
@ -25,13 +26,15 @@ localeTitle: إعداد تطوير تطبيق Cordova iOS للنشر
|
|||||||
|
|
||||||
الخطوة التالية هي لتشغيل الأمر بناء كوردوفا. سيؤدي هذا إلى تحويل شفرة التطبيق إلى ملف .xcodeproj الذي سنستخدمه بعد ذلك.
|
الخطوة التالية هي لتشغيل الأمر بناء كوردوفا. سيؤدي هذا إلى تحويل شفرة التطبيق إلى ملف .xcodeproj الذي سنستخدمه بعد ذلك.
|
||||||
|
|
||||||
`sudo cordova build ios
|
```
|
||||||
`
|
sudo cordova build ios
|
||||||
|
```
|
||||||
|
|
||||||
سيكون ملف مشروع Xcode الذي تم إنشاؤه في:
|
سيكون ملف مشروع Xcode الذي تم إنشاؤه في:
|
||||||
|
|
||||||
`[Your App Folder]/platforms/ios/[Your App Name].xcodeproj
|
```
|
||||||
`
|
[Your App Folder]/platforms/ios/[Your App Name].xcodeproj
|
||||||
|
```
|
||||||
|
|
||||||
الآن في حالة حدوث Android ، يتم توقيع الشفرة باستخدام ملف Keystore بتنسيق jj. ومع ذلك ، في حالة ركاب iOS لتوزيع تطبيقات iOS ، يجب أن يكون لديك حساب مطوّر برامج Apple ، هذا حتى نتمكن من إنشاء _الشهادات_ _وملفات التعريف الاحتياطية_ اللازمة لتوزيع التطبيق.
|
الآن في حالة حدوث Android ، يتم توقيع الشفرة باستخدام ملف Keystore بتنسيق jj. ومع ذلك ، في حالة ركاب iOS لتوزيع تطبيقات iOS ، يجب أن يكون لديك حساب مطوّر برامج Apple ، هذا حتى نتمكن من إنشاء _الشهادات_ _وملفات التعريف الاحتياطية_ اللازمة لتوزيع التطبيق.
|
||||||
|
|
||||||
|
@ -12,19 +12,21 @@ localeTitle: Firebase Cloud Messaging Integration for Cordova Hybrid Apps
|
|||||||
|
|
||||||
قم بإنشاء مجلد فارغ pushSample
|
قم بإنشاء مجلد فارغ pushSample
|
||||||
|
|
||||||
`cd '/opt/lampp/htdocs'
|
```
|
||||||
mkdir pushSample
|
cd '/opt/lampp/htdocs'
|
||||||
cd pushSample
|
mkdir pushSample
|
||||||
cordova create pushSample
|
cd pushSample
|
||||||
cd pushSample
|
cordova create pushSample
|
||||||
cordova platform add android
|
cd pushSample
|
||||||
cordova plugin add cordova-plugin-FCM
|
cordova platform add android
|
||||||
`
|
cordova plugin add cordova-plugin-FCM
|
||||||
|
```
|
||||||
|
|
||||||
أثناء إضافة المكوّن الإضافي Cordova FCM ، سيظهر خطأ:
|
أثناء إضافة المكوّن الإضافي Cordova FCM ، سيظهر خطأ:
|
||||||
|
|
||||||
`Error: cordova-plugin-fcm: You have installed platform android but file 'google-services.json' was not found in your Cordova project root folder.
|
```
|
||||||
`
|
Error: cordova-plugin-fcm: You have installed platform android but file 'google-services.json' was not found in your Cordova project root folder.
|
||||||
|
```
|
||||||
|
|
||||||
ملاحظة: يرجع ذلك إلى أننا لم نضف ملف google-services.json الذي يجب إنشاؤه في الخطوات التالية.
|
ملاحظة: يرجع ذلك إلى أننا لم نضف ملف google-services.json الذي يجب إنشاؤه في الخطوات التالية.
|
||||||
|
|
||||||
@ -36,38 +38,40 @@ localeTitle: Firebase Cloud Messaging Integration for Cordova Hybrid Apps
|
|||||||
|
|
||||||
في النموذج المنبثق التالي ، املأ التفاصيل كما يلي: **اسم حزمة Android: اسم** الحزمة أو معرفها هو المعرف الفريد لأحد التطبيقات في متجر Play. لاحظ أنها قيمة مهمة جدًا لا يمكن تغييرها لأحد التطبيقات بمجرد تحميلها إلى متجر Play. سيكون في بناء جملة اسم النطاق العكسي: على سبيل المثال ، سيكون لدى hello.pushSample.com معرف التطبيق: com.pushSample.hello. أيضا في ملف **config.xml** في مشروع كوردوفا الخاص بك تعيين معرف التطبيق نفسه. لمشروع العينة لدينا سيكون في: pushSample / pushSample / config.xml على سبيل المثال بالنسبة لي محتويات هذا الملف هي:
|
في النموذج المنبثق التالي ، املأ التفاصيل كما يلي: **اسم حزمة Android: اسم** الحزمة أو معرفها هو المعرف الفريد لأحد التطبيقات في متجر Play. لاحظ أنها قيمة مهمة جدًا لا يمكن تغييرها لأحد التطبيقات بمجرد تحميلها إلى متجر Play. سيكون في بناء جملة اسم النطاق العكسي: على سبيل المثال ، سيكون لدى hello.pushSample.com معرف التطبيق: com.pushSample.hello. أيضا في ملف **config.xml** في مشروع كوردوفا الخاص بك تعيين معرف التطبيق نفسه. لمشروع العينة لدينا سيكون في: pushSample / pushSample / config.xml على سبيل المثال بالنسبة لي محتويات هذا الملف هي:
|
||||||
|
|
||||||
`<?xml version='1.0' encoding='utf-8'?>
|
```xml
|
||||||
<widget id="io.cordova.hellocordova" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
<name>HelloCordova</name>
|
<widget id="io.cordova.hellocordova" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
|
||||||
<description>
|
<name>HelloCordova</name>
|
||||||
A sample Apache Cordova application that responds to the deviceready event.
|
<description>
|
||||||
</description>
|
A sample Apache Cordova application that responds to the deviceready event.
|
||||||
<author email="dev@cordova.apache.org" href="http://cordova.io">
|
</description>
|
||||||
Apache Cordova Team
|
<author email="dev@cordova.apache.org" href="http://cordova.io">
|
||||||
</author>
|
Apache Cordova Team
|
||||||
<content src="index.html" />
|
</author>
|
||||||
<plugin name="cordova-plugin-whitelist" spec="1" />
|
<content src="index.html" />
|
||||||
<access origin="*" />
|
<plugin name="cordova-plugin-whitelist" spec="1" />
|
||||||
<allow-intent href="http://*/*" />
|
<access origin="*" />
|
||||||
<allow-intent href="https://*/*" />
|
<allow-intent href="http://*/*" />
|
||||||
<allow-intent href="tel:*" />
|
<allow-intent href="https://*/*" />
|
||||||
<allow-intent href="sms:*" />
|
<allow-intent href="tel:*" />
|
||||||
<allow-intent href="mailto:*" />
|
<allow-intent href="sms:*" />
|
||||||
<allow-intent href="geo:*" />
|
<allow-intent href="mailto:*" />
|
||||||
<platform name="android">
|
<allow-intent href="geo:*" />
|
||||||
<allow-intent href="market:*" />
|
<platform name="android">
|
||||||
</platform>
|
<allow-intent href="market:*" />
|
||||||
<platform name="ios">
|
</platform>
|
||||||
<allow-intent href="itms:*" />
|
<platform name="ios">
|
||||||
<allow-intent href="itms-apps:*" />
|
<allow-intent href="itms:*" />
|
||||||
</platform>
|
<allow-intent href="itms-apps:*" />
|
||||||
</widget>
|
</platform>
|
||||||
`
|
</widget>
|
||||||
|
```
|
||||||
|
|
||||||
لاحظ العلامة
|
لاحظ العلامة
|
||||||
|
|
||||||
`<widget id="io.cordova.hellocordova" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
|
```xml
|
||||||
`
|
<widget id="io.cordova.hellocordova" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
|
||||||
|
```
|
||||||
|
|
||||||
هنا هوية السمة هو **معرف** حزمة والتي سوف يكون افتراضيا **io.cordova.hellocordova** تغييره إلى معرف التطبيق الذي قمت بتحديده في وحدة تحكم firebase. سوف أستخدم com.pushSample.hello
|
هنا هوية السمة هو **معرف** حزمة والتي سوف يكون افتراضيا **io.cordova.hellocordova** تغييره إلى معرف التطبيق الذي قمت بتحديده في وحدة تحكم firebase. سوف أستخدم com.pushSample.hello
|
||||||
|
|
||||||
@ -87,38 +91,41 @@ localeTitle: Firebase Cloud Messaging Integration for Cordova Hybrid Apps
|
|||||||
|
|
||||||
بمجرد حصولك على الملف ، الصقه في المجلد الجذر لمشروع Cordova الخاص بك ، في حالتي:
|
بمجرد حصولك على الملف ، الصقه في المجلد الجذر لمشروع Cordova الخاص بك ، في حالتي:
|
||||||
|
|
||||||
`/opt/lampp/htdocs/pushSample/pushSample
|
```
|
||||||
`
|
/opt/lampp/htdocs/pushSample/pushSample
|
||||||
|
```
|
||||||
|
|
||||||
المقبل بناء المشروع
|
المقبل بناء المشروع
|
||||||
|
|
||||||
`cordova build android
|
```
|
||||||
`
|
cordova build android
|
||||||
|
```
|
||||||
|
|
||||||
بعد إضافة ملف google-services.json ، يجب أن يتم إنشاؤه بنجاح.
|
بعد إضافة ملف google-services.json ، يجب أن يتم إنشاؤه بنجاح.
|
||||||
|
|
||||||
بعد ذلك ، يتعين علينا كتابة رمز جانب العميل للتعامل مع إشعارات الدفع:
|
بعد ذلك ، يتعين علينا كتابة رمز جانب العميل للتعامل مع إشعارات الدفع:
|
||||||
|
|
||||||
`FCMPlugin.getToken(function(token) {
|
```js
|
||||||
//this is the FCM token which can be used
|
FCMPlugin.getToken(function(token) {
|
||||||
//to send notification to specific device
|
//this is the FCM token which can be used
|
||||||
console.log(token);
|
//to send notification to specific device
|
||||||
//FCMPlugin.onNotification( onNotificationCallback(data), successCallback(msg), errorCallback(err) )
|
console.log(token);
|
||||||
//Here you define your application behaviour based on the notification data.
|
//FCMPlugin.onNotification( onNotificationCallback(data), successCallback(msg), errorCallback(err) )
|
||||||
FCMPlugin.onNotification(function(data) {
|
//Here you define your application behaviour based on the notification data.
|
||||||
console.log(data);
|
FCMPlugin.onNotification(function(data) {
|
||||||
//data.wasTapped == true means in Background : Notification was received on device tray and tapped by the user.
|
console.log(data);
|
||||||
//data.wasTapped == false means in foreground : Notification was received in foreground. Maybe the user needs to be notified.
|
//data.wasTapped == true means in Background : Notification was received on device tray and tapped by the user.
|
||||||
// if (data.wasTapped) {
|
//data.wasTapped == false means in foreground : Notification was received in foreground. Maybe the user needs to be notified.
|
||||||
// //Notification was received on device tray and tapped by the user.
|
// if (data.wasTapped) {
|
||||||
// alert(JSON.stringify(data));
|
// //Notification was received on device tray and tapped by the user.
|
||||||
// } else {
|
// alert(JSON.stringify(data));
|
||||||
// //Notification was received in foreground. Maybe the user needs to be notified.
|
// } else {
|
||||||
// alert(JSON.stringify(data));
|
// //Notification was received in foreground. Maybe the user needs to be notified.
|
||||||
// }
|
// alert(JSON.stringify(data));
|
||||||
});
|
// }
|
||||||
});
|
});
|
||||||
`
|
});
|
||||||
|
```
|
||||||
|
|
||||||
يقوم الرمز أولاً باستدعاء الدالة **getToken** للحصول على رمز FCM المميز من firebase ، ثم في معاودة الاتصال يقوم بتسجيل رد **اتصال** آخر على **Notification** لمعالجة ما يحدث عند تلقي إعلام الدفع.
|
يقوم الرمز أولاً باستدعاء الدالة **getToken** للحصول على رمز FCM المميز من firebase ، ثم في معاودة الاتصال يقوم بتسجيل رد **اتصال** آخر على **Notification** لمعالجة ما يحدث عند تلقي إعلام الدفع.
|
||||||
|
|
||||||
@ -138,8 +145,9 @@ localeTitle: Firebase Cloud Messaging Integration for Cordova Hybrid Apps
|
|||||||
|
|
||||||
سيظهر كائن البيانات في رد الاتصال onNotification على النحو التالي
|
سيظهر كائن البيانات في رد الاتصال onNotification على النحو التالي
|
||||||
|
|
||||||
`{myKey2: "valuefor2", myKey: "valuefor1", wasTapped: false}
|
```js
|
||||||
`
|
{myKey2: "valuefor2", myKey: "valuefor1", wasTapped: false}
|
||||||
|
```
|
||||||
|
|
||||||
لاحظ أيضًا أنه عند إرسال إشعارات الدفع باستخدام واجهات برمجة تطبيقات REST من خادم تطبيقاتك بدلاً من ملحن إخطار Firebase ، يجب عليك استخدام البنية التالية:
|
لاحظ أيضًا أنه عند إرسال إشعارات الدفع باستخدام واجهات برمجة تطبيقات REST من خادم تطبيقاتك بدلاً من ملحن إخطار Firebase ، يجب عليك استخدام البنية التالية:
|
||||||
|
|
||||||
@ -209,58 +217,68 @@ localeTitle: Firebase Cloud Messaging Integration for Cordova Hybrid Apps
|
|||||||
|
|
||||||
هنا ، كما ناقشنا سابقًا ، قم بتحميل مفتاح APNs Auth الذي أنشأته في مركز عضو Apple. بعد ذلك نقوم بإعداد تطبيق جانب العميل. إنشاء مجلد جديد sampleApp في مجلد التطوير الخاص بك ، بالنسبة لي هو
|
هنا ، كما ناقشنا سابقًا ، قم بتحميل مفتاح APNs Auth الذي أنشأته في مركز عضو Apple. بعد ذلك نقوم بإعداد تطبيق جانب العميل. إنشاء مجلد جديد sampleApp في مجلد التطوير الخاص بك ، بالنسبة لي هو
|
||||||
|
|
||||||
`/Volumes/Development/
|
```
|
||||||
`
|
/Volumes/Development/
|
||||||
|
```
|
||||||
|
|
||||||
لذلك سيكون المجلد الجديد
|
لذلك سيكون المجلد الجديد
|
||||||
|
|
||||||
`/Volumes/Development/pushSample
|
```
|
||||||
cd /Volumes/Development/pushSample
|
/Volumes/Development/pushSample
|
||||||
`
|
cd /Volumes/Development/pushSample
|
||||||
|
```
|
||||||
|
|
||||||
إنشاء مشروع جديد Cordova ، **ملاحظة: استخدم sudo إذا لزم الأمر**
|
إنشاء مشروع جديد Cordova ، **ملاحظة: استخدم sudo إذا لزم الأمر**
|
||||||
|
|
||||||
`cordova create pushSample
|
```
|
||||||
cd pushSample
|
cordova create pushSample
|
||||||
`
|
cd pushSample
|
||||||
|
```
|
||||||
|
|
||||||
أضف الآن أحدث نظام iOS
|
أضف الآن أحدث نظام iOS
|
||||||
|
|
||||||
`sudo cordova platform add ios
|
```
|
||||||
`
|
sudo cordova platform add ios
|
||||||
|
```
|
||||||
|
|
||||||
الآن قم بلصق ملف **Googleservice-info.plist** الذي تم تنزيله مسبقًا في المجلد الجذر لمشروع Cordova ، وهو كذلك
|
الآن قم بلصق ملف **Googleservice-info.plist** الذي تم تنزيله مسبقًا في المجلد الجذر لمشروع Cordova ، وهو كذلك
|
||||||
|
|
||||||
`/Volumes/Development/pushSample/pushSample
|
```
|
||||||
`
|
/Volumes/Development/pushSample/pushSample
|
||||||
|
```
|
||||||
|
|
||||||
إضافة البرنامج المساعد Cordova FCM.
|
إضافة البرنامج المساعد Cordova FCM.
|
||||||
|
|
||||||
`cordova plugin add cordova-plugin-fcm
|
```
|
||||||
`
|
cordova plugin add cordova-plugin-fcm
|
||||||
|
```
|
||||||
|
|
||||||
حدِّث معرف التطبيق الافتراضي واسم التطبيق بمعرف الحزمة الذي قررناه سابقًا أثناء تهيئة وحدة التحكم في Firebase واسم التطبيق.
|
حدِّث معرف التطبيق الافتراضي واسم التطبيق بمعرف الحزمة الذي قررناه سابقًا أثناء تهيئة وحدة التحكم في Firebase واسم التطبيق.
|
||||||
|
|
||||||
`<widget id="com.pushSample.hello" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
|
```xml
|
||||||
<name>PushSample</name>
|
<widget id="com.pushSample.hello" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
|
||||||
`
|
<name>PushSample</name>
|
||||||
|
```
|
||||||
|
|
||||||
في هذه المرحلة ، سيحتوي نموذج التعليمة البرمجية على ملف app.js ، والذي يمكنك تعديله وإضافة وظائف getToken و onNotification مثل android. شفرة javascript هي نفسها لكلا المنصتين.
|
في هذه المرحلة ، سيحتوي نموذج التعليمة البرمجية على ملف app.js ، والذي يمكنك تعديله وإضافة وظائف getToken و onNotification مثل android. شفرة javascript هي نفسها لكلا المنصتين.
|
||||||
|
|
||||||
التالي تشغيل الأمر بناء cordova
|
التالي تشغيل الأمر بناء cordova
|
||||||
|
|
||||||
`sudo cordova build ios
|
```
|
||||||
`
|
sudo cordova build ios
|
||||||
|
```
|
||||||
|
|
||||||
بمجرد نجاح أمر بناء cordova ، افتح التطبيق في xcode. للقيام بذلك ، افتح الملف xcode.proj الذي سيكون موجودًا في
|
بمجرد نجاح أمر بناء cordova ، افتح التطبيق في xcode. للقيام بذلك ، افتح الملف xcode.proj الذي سيكون موجودًا في
|
||||||
|
|
||||||
`your_cordova_project/platforms/ios/app_name.xcodeproj
|
```
|
||||||
`
|
your_cordova_project/platforms/ios/app_name.xcodeproj
|
||||||
|
```
|
||||||
|
|
||||||
بالنسبة لي هو
|
بالنسبة لي هو
|
||||||
|
|
||||||
`/Volumes/Development/pushSample/pushSample/platforms/ios/PushSample.xcodeproj
|
```
|
||||||
`
|
/Volumes/Development/pushSample/pushSample/platforms/ios/PushSample.xcodeproj
|
||||||
|
```
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
@ -14,13 +14,15 @@ localeTitle: Nodejs- Buffer
|
|||||||
|
|
||||||
هناك طرق مختلفة يمكنك إنشاء مخزن مؤقت في Node.js. يمكنك إنشاء مخزن مؤقت فارغ بحجم 10 بايت.
|
هناك طرق مختلفة يمكنك إنشاء مخزن مؤقت في Node.js. يمكنك إنشاء مخزن مؤقت فارغ بحجم 10 بايت.
|
||||||
|
|
||||||
`const buf1 = Buffer.alloc(10);
|
```javascript
|
||||||
`
|
const buf1 = Buffer.alloc(10);
|
||||||
|
```
|
||||||
|
|
||||||
من السلاسل UTF-8-encoded ، يكون الإنشاء كالتالي:
|
من السلاسل UTF-8-encoded ، يكون الإنشاء كالتالي:
|
||||||
|
|
||||||
`const buf2 = Buffer.from('Hello World!');
|
```javascript
|
||||||
`
|
const buf2 = Buffer.from('Hello World!');
|
||||||
|
```
|
||||||
|
|
||||||
هناك ترميز مقبول مختلف عند إنشاء مخزن مؤقت:
|
هناك ترميز مقبول مختلف عند إنشاء مخزن مؤقت:
|
||||||
|
|
||||||
@ -33,8 +35,9 @@ localeTitle: Nodejs- Buffer
|
|||||||
|
|
||||||
هناك ثلاث وظائف منفصلة مخصصة في API Buffer لاستخدام وإنشاء مخازن جديدة. في الأمثلة أعلاه رأينا `alloc()` ومن `from()` . والثالث هو `allocUnsafe()` .
|
هناك ثلاث وظائف منفصلة مخصصة في API Buffer لاستخدام وإنشاء مخازن جديدة. في الأمثلة أعلاه رأينا `alloc()` ومن `from()` . والثالث هو `allocUnsafe()` .
|
||||||
|
|
||||||
`const buf3 = Buffer.allocUnsafe(10);
|
```javascript
|
||||||
`
|
const buf3 = Buffer.allocUnsafe(10);
|
||||||
|
```
|
||||||
|
|
||||||
عند إعادتها ، قد تحتوي هذه الوظيفة على بيانات قديمة تحتاج إلى الكتابة فوقها.
|
عند إعادتها ، قد تحتوي هذه الوظيفة على بيانات قديمة تحتاج إلى الكتابة فوقها.
|
||||||
|
|
||||||
@ -42,40 +45,45 @@ localeTitle: Nodejs- Buffer
|
|||||||
|
|
||||||
هناك تفاعلات مختلفة يمكن إجراؤها باستخدام واجهة برمجة تطبيقات Buffer. سنقوم بتغطية معظمهم هنا. دعونا نبدأ بتحويل مخزن مؤقت إلى JSON.
|
هناك تفاعلات مختلفة يمكن إجراؤها باستخدام واجهة برمجة تطبيقات Buffer. سنقوم بتغطية معظمهم هنا. دعونا نبدأ بتحويل مخزن مؤقت إلى JSON.
|
||||||
|
|
||||||
`let bufferOne = Buffer.from('This is a buffer example.');
|
```javascript
|
||||||
console.log(bufferOne);
|
let bufferOne = Buffer.from('This is a buffer example.');
|
||||||
|
console.log(bufferOne);
|
||||||
// Output: <Buffer 54 68 69 73 20 69 73 20 61 20 62 75 66 66 65 72 20 65 78 61 6d 70 6c 65 2e>
|
|
||||||
|
// Output: <Buffer 54 68 69 73 20 69 73 20 61 20 62 75 66 66 65 72 20 65 78 61 6d 70 6c 65 2e>
|
||||||
let json = JSON.stringify(bufferOne);
|
|
||||||
console.log(json);
|
let json = JSON.stringify(bufferOne);
|
||||||
|
console.log(json);
|
||||||
// Output: {"type": "Buffer", "data": [84,104,105,115,32,105,115,32,97,32,98,117,102,102,101,114,32,101,120,97,109,112,108,101,46]}
|
|
||||||
`
|
// Output: {"type": "Buffer", "data": [84,104,105,115,32,105,115,32,97,32,98,117,102,102,101,114,32,101,120,97,109,112,108,101,46]}
|
||||||
|
```
|
||||||
|
|
||||||
تحدد JSON أن نوع الكائن الذي تم تحويله هو Buffer ، وبياناته. سيظهر لنا تحويل مخزن مؤقت فارغ إلى JSON أنه لا يحتوي على أي شيء سوى الأصفار.
|
تحدد JSON أن نوع الكائن الذي تم تحويله هو Buffer ، وبياناته. سيظهر لنا تحويل مخزن مؤقت فارغ إلى JSON أنه لا يحتوي على أي شيء سوى الأصفار.
|
||||||
|
|
||||||
`const emptyBuf = Buffer.alloc(10);
|
```javascript
|
||||||
|
const emptyBuf = Buffer.alloc(10);
|
||||||
emptyBuf.toJSON();
|
|
||||||
|
emptyBuf.toJSON();
|
||||||
// Output: { "type": "Buffer", "data": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] }
|
|
||||||
`
|
// Output: { "type": "Buffer", "data": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] }
|
||||||
|
```
|
||||||
|
|
||||||
لاحظ أن Buffer API يوفر أيضًا دالة مباشرة `toJSON()` لتحويل مخزن مؤقت إلى كائن JSON. لفحص حجم المخزن المؤقت ، يمكننا استخدام طريقة `length` .
|
لاحظ أن Buffer API يوفر أيضًا دالة مباشرة `toJSON()` لتحويل مخزن مؤقت إلى كائن JSON. لفحص حجم المخزن المؤقت ، يمكننا استخدام طريقة `length` .
|
||||||
|
|
||||||
`emptyBuf.length;
|
```javascript
|
||||||
// Output: 10
|
emptyBuf.length;
|
||||||
`
|
// Output: 10
|
||||||
|
```
|
||||||
|
|
||||||
الآن دعونا تحويل المخزن المؤقت إلى سلسلة قابلة للقراءة ، في حالتنا ، ترميز utf-8.
|
الآن دعونا تحويل المخزن المؤقت إلى سلسلة قابلة للقراءة ، في حالتنا ، ترميز utf-8.
|
||||||
|
|
||||||
`console.log(bufferOne.toString('utf8'));
|
```javascript
|
||||||
|
console.log(bufferOne.toString('utf8'));
|
||||||
// Output: This is a buffer example.
|
|
||||||
`
|
// Output: This is a buffer example.
|
||||||
|
```
|
||||||
|
|
||||||
`.toString()` بشكل افتراضي بتحويل مخزن مؤقت إلى سلسلة تنسيق utf-8. هذه هي الطريقة التي فك ترميز المخزن المؤقت. إذا قمت بتحديد ترميز ، يمكنك تحويل المخزن المؤقت إلى ترميز آخر
|
`.toString()` بشكل افتراضي بتحويل مخزن مؤقت إلى سلسلة تنسيق utf-8. هذه هي الطريقة التي فك ترميز المخزن المؤقت. إذا قمت بتحديد ترميز ، يمكنك تحويل المخزن المؤقت إلى ترميز آخر
|
||||||
|
|
||||||
`console.log(bufferOne.toString('base64'));
|
```javascript
|
||||||
`
|
console.log(bufferOne.toString('base64'));
|
||||||
|
```
|
@ -12,29 +12,33 @@ EventEmitters هي واحدة من الأفكار الأساسية وراء بن
|
|||||||
|
|
||||||
للوصول إلى فئة EventEmitter في برنامج Node.js ، يجب عليك طلب وحدة `events` من واجهة برمجة التطبيقات Node.js. لإنشاء الكائن ، نقوم بإنشاء مثيل لفئة EventEmitter من خلال استدعاء دالة منشئه.
|
للوصول إلى فئة EventEmitter في برنامج Node.js ، يجب عليك طلب وحدة `events` من واجهة برمجة التطبيقات Node.js. لإنشاء الكائن ، نقوم بإنشاء مثيل لفئة EventEmitter من خلال استدعاء دالة منشئه.
|
||||||
|
|
||||||
`const events = require('events');
|
```js
|
||||||
|
const events = require('events');
|
||||||
const eventEmitter = new events.EventEmitter();
|
|
||||||
`
|
const eventEmitter = new events.EventEmitter();
|
||||||
|
```
|
||||||
|
|
||||||
أو يمكنك مباشرة الوصول إلى فئة فرعية EventEmitter مثل:
|
أو يمكنك مباشرة الوصول إلى فئة فرعية EventEmitter مثل:
|
||||||
|
|
||||||
`const EventEmitter = require('events');
|
```js
|
||||||
|
const EventEmitter = require('events');
|
||||||
const eventEmitter = new EventEmitter();
|
|
||||||
`
|
const eventEmitter = new EventEmitter();
|
||||||
|
```
|
||||||
|
|
||||||
توفر فئة EventEmitter العديد من الأساليب المحددة مسبقًا للعمل مع الأحداث. هذه الأساليب هي `.on` و `.emit` و `.error` . يمكن إجراء بث لحدث من دالة مما يؤدي إلى وظيفة رد اتصال يمكن الوصول إليها من خلال أي وظيفة أخرى في JavaScript. هذا مثل البث.
|
توفر فئة EventEmitter العديد من الأساليب المحددة مسبقًا للعمل مع الأحداث. هذه الأساليب هي `.on` و `.emit` و `.error` . يمكن إجراء بث لحدث من دالة مما يؤدي إلى وظيفة رد اتصال يمكن الوصول إليها من خلال أي وظيفة أخرى في JavaScript. هذا مثل البث.
|
||||||
|
|
||||||
يمكن تنفيذ القدرة على تشغيل حدث باتباع البنية:
|
يمكن تنفيذ القدرة على تشغيل حدث باتباع البنية:
|
||||||
|
|
||||||
`eventEmitter.emit(eventName, optionalData);
|
```js
|
||||||
`
|
eventEmitter.emit(eventName, optionalData);
|
||||||
|
```
|
||||||
|
|
||||||
ويتم ذلك القدرة على إرفاق ظيفة المستمع وتحديد اسم الحدث المحدد الذي `.on` .
|
ويتم ذلك القدرة على إرفاق ظيفة المستمع وتحديد اسم الحدث المحدد الذي `.on` .
|
||||||
|
|
||||||
`eventEmitter.emit(eventName, callback);
|
```js
|
||||||
`
|
eventEmitter.emit(eventName, callback);
|
||||||
|
```
|
||||||
|
|
||||||
سنقوم بمحاكاة الوظائف الجديدة التي تعلمناها للتو مع مثال. قم بإنشاء ملف جديد يسمى `eventemitter.js` وقم بلصق التعليمة البرمجية التالية:
|
سنقوم بمحاكاة الوظائف الجديدة التي تعلمناها للتو مع مثال. قم بإنشاء ملف جديد يسمى `eventemitter.js` وقم بلصق التعليمة البرمجية التالية:
|
||||||
|
|
||||||
@ -54,9 +58,10 @@ EventEmitters هي واحدة من الأفكار الأساسية وراء بن
|
|||||||
|
|
||||||
الآن قم بتشغيل المثال أعلاه باستخدام الأمر `node` ويجب أن تحصل على الإخراج التالي.
|
الآن قم بتشغيل المثال أعلاه باستخدام الأمر `node` ويجب أن تحصل على الإخراج التالي.
|
||||||
|
|
||||||
`callback runs
|
```shell
|
||||||
callback runs
|
callback runs
|
||||||
`
|
callback runs
|
||||||
|
```
|
||||||
|
|
||||||
نبدأ من خلال خلق مثيل eventEmitter نستطيع من خلالها الحصول على `.on` هذه الطريقة. تضيف طريقة `.on` الحدث عن طريق تحديد `invoke` الاسم الذي نستخدمه لاحقًا في `.emit` للاتصال باستدعاء وظيفة رد الاتصال المرتبطة به.
|
نبدأ من خلال خلق مثيل eventEmitter نستطيع من خلالها الحصول على `.on` هذه الطريقة. تضيف طريقة `.on` الحدث عن طريق تحديد `invoke` الاسم الذي نستخدمه لاحقًا في `.emit` للاتصال باستدعاء وظيفة رد الاتصال المرتبطة به.
|
||||||
|
|
||||||
@ -78,8 +83,9 @@ EventEmitters هي واحدة من الأفكار الأساسية وراء بن
|
|||||||
|
|
||||||
انتاج |
|
انتاج |
|
||||||
|
|
||||||
`callback runs
|
```shell
|
||||||
`
|
callback runs
|
||||||
|
```
|
||||||
|
|
||||||
`.once` الاحتفاظ بمسارات الأحداث عندما يتم تشغيلها وعدد المرات التي يتم تشغيلها بخلاف طريقة `.on` التي لا تتبع مثل هذا المسار. هذا هو الفرق الرئيسي بين الاثنين.
|
`.once` الاحتفاظ بمسارات الأحداث عندما يتم تشغيلها وعدد المرات التي يتم تشغيلها بخلاف طريقة `.on` التي لا تتبع مثل هذا المسار. هذا هو الفرق الرئيسي بين الاثنين.
|
||||||
|
|
||||||
@ -110,8 +116,9 @@ EventEmitters هي واحدة من الأفكار الأساسية وراء بن
|
|||||||
|
|
||||||
يسمح لك الدفق المقروء بقراءة البيانات من المصدر. يمكن أن يكون هذا المصدر أي شيء من مخزن مؤقت أو ملف أو ما إلى ذلك. أولاً ، قم بإنشاء ملف نصي بسيط للملف الذي سنقوم من خلاله بقراءة البيانات باستخدام الدفق.
|
يسمح لك الدفق المقروء بقراءة البيانات من المصدر. يمكن أن يكون هذا المصدر أي شيء من مخزن مؤقت أو ملف أو ما إلى ذلك. أولاً ، قم بإنشاء ملف نصي بسيط للملف الذي سنقوم من خلاله بقراءة البيانات باستخدام الدفق.
|
||||||
|
|
||||||
`I am Text file that contains data.
|
```text
|
||||||
`
|
I am Text file that contains data.
|
||||||
|
```
|
||||||
|
|
||||||
الآن ، قم بإنشاء ملف جديد يسمى read.js والذي سينفذ وظيفة قراءة البيانات من هذا الملف النصي باستخدام دفق مقروء.
|
الآن ، قم بإنشاء ملف جديد يسمى read.js والذي سينفذ وظيفة قراءة البيانات من هذا الملف النصي باستخدام دفق مقروء.
|
||||||
|
|
||||||
@ -160,11 +167,12 @@ EventEmitters هي واحدة من الأفكار الأساسية وراء بن
|
|||||||
|
|
||||||
إذا أردنا كتابة المثال أعلاه باستخدام الأنبوب ، فسوف نكتب كما يلي:
|
إذا أردنا كتابة المثال أعلاه باستخدام الأنبوب ، فسوف نكتب كما يلي:
|
||||||
|
|
||||||
`const fs = require('fs');
|
```js
|
||||||
const readableStream = fs.createReadStream('./abc.txt');
|
const fs = require('fs');
|
||||||
const writeableStream = fs.createWriteStream('./dest.txt');
|
const readableStream = fs.createReadStream('./abc.txt');
|
||||||
|
const writeableStream = fs.createWriteStream('./dest.txt');
|
||||||
readableStream.pipe(writeableStream);
|
|
||||||
`
|
readableStream.pipe(writeableStream);
|
||||||
|
```
|
||||||
|
|
||||||
لاحظ عدد أسطر الرمز التي أزلناها. أيضا ، نحن الآن بحاجة فقط إلى مسارات الملفات المصدر والوجهة ولقراءة وكتابة البيانات التي نستخدمها `.pipe()` .
|
لاحظ عدد أسطر الرمز التي أزلناها. أيضا ، نحن الآن بحاجة فقط إلى مسارات الملفات المصدر والوجهة ولقراءة وكتابة البيانات التي نستخدمها `.pipe()` .
|
@ -14,11 +14,12 @@ Express هو إطار Node.js الأكثر شيوعًا لأنه يتطلب ال
|
|||||||
|
|
||||||
للتحقق مما إذا كان كل شيء مثبتًا بشكل صحيح ، يرجى فتح الجهاز ونوع:
|
للتحقق مما إذا كان كل شيء مثبتًا بشكل صحيح ، يرجى فتح الجهاز ونوع:
|
||||||
|
|
||||||
`node --version
|
```shell
|
||||||
v5.0.0
|
node --version
|
||||||
npm --version
|
v5.0.0
|
||||||
3.5.2
|
npm --version
|
||||||
`
|
3.5.2
|
||||||
|
```
|
||||||
|
|
||||||
إذا كنت تحصل على رقم الإصدار بدلاً من خطأ ، فهذا يعني أنك قمت بتثبيت Node.js و npm بنجاح.
|
إذا كنت تحصل على رقم الإصدار بدلاً من خطأ ، فهذا يعني أنك قمت بتثبيت Node.js و npm بنجاح.
|
||||||
|
|
||||||
@ -38,50 +39,54 @@ Express هو إطار Node.js الأكثر شيوعًا لأنه يتطلب ال
|
|||||||
|
|
||||||
يحتوي ملف JSON (تدوين كائن جافا سكريبت) على كل معلومات عن أي مشروع Express. عدد الوحدات النمطية المثبتة ، واسم المشروع ، والإصدار ، وغيرها من معلومات التعريف. لإضافة Expressjs كوحدة نمطية في مشروعنا ، نحتاج أولاً إلى إنشاء دليل مشروع ثم إنشاء ملف package.json.
|
يحتوي ملف JSON (تدوين كائن جافا سكريبت) على كل معلومات عن أي مشروع Express. عدد الوحدات النمطية المثبتة ، واسم المشروع ، والإصدار ، وغيرها من معلومات التعريف. لإضافة Expressjs كوحدة نمطية في مشروعنا ، نحتاج أولاً إلى إنشاء دليل مشروع ثم إنشاء ملف package.json.
|
||||||
|
|
||||||
`mkdir express-app-example
|
```shell
|
||||||
cd express-app-example
|
mkdir express-app-example
|
||||||
npm init --yes
|
cd express-app-example
|
||||||
`
|
npm init --yes
|
||||||
|
```
|
||||||
|
|
||||||
سيؤدي هذا إلى إنشاء ملف `package.json` في جذر دليل المشروع. لتثبيت أي وحدة نمطية من `npm` نحتاج إلى وجود ملف `package.json` في هذا الدليل.
|
سيؤدي هذا إلى إنشاء ملف `package.json` في جذر دليل المشروع. لتثبيت أي وحدة نمطية من `npm` نحتاج إلى وجود ملف `package.json` في هذا الدليل.
|
||||||
|
|
||||||
`{
|
```json
|
||||||
"name": "express-web-app",
|
{
|
||||||
"version": "0.1.0",
|
"name": "express-web-app",
|
||||||
"description": "",
|
"version": "0.1.0",
|
||||||
"main": "index.js",
|
"description": "",
|
||||||
"scripts": {
|
"main": "index.js",
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
"scripts": {
|
||||||
},
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
"keywords": [],
|
},
|
||||||
"license": "MIT"
|
"keywords": [],
|
||||||
}
|
"license": "MIT"
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### تثبيت اكسبرس
|
### تثبيت اكسبرس
|
||||||
|
|
||||||
الآن لدينا ملف `package.json` ، يمكننا تثبيت Express عن طريق تشغيل الأمر:
|
الآن لدينا ملف `package.json` ، يمكننا تثبيت Express عن طريق تشغيل الأمر:
|
||||||
|
|
||||||
`npm install --save express
|
```shell
|
||||||
`
|
npm install --save express
|
||||||
|
```
|
||||||
|
|
||||||
يمكننا التأكد من أن Express قد تم تثبيته بشكل صحيح بطريقتين. أولاً ، سيكون هناك قسم جديد في ملف `package.json` يسمى `dependencies` التي يوجد تحتها Express الخاص بنا:
|
يمكننا التأكد من أن Express قد تم تثبيته بشكل صحيح بطريقتين. أولاً ، سيكون هناك قسم جديد في ملف `package.json` يسمى `dependencies` التي يوجد تحتها Express الخاص بنا:
|
||||||
|
|
||||||
`{
|
```json
|
||||||
"name": "express-web-app",
|
{
|
||||||
"version": "0.1.0",
|
"name": "express-web-app",
|
||||||
"description": "",
|
"version": "0.1.0",
|
||||||
"main": "index.js",
|
"description": "",
|
||||||
"scripts": {
|
"main": "index.js",
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
"scripts": {
|
||||||
},
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
"keywords": [],
|
},
|
||||||
"license": "MIT",
|
"keywords": [],
|
||||||
"dependencies": {
|
"license": "MIT",
|
||||||
"express": "4.16.0"
|
"dependencies": {
|
||||||
}
|
"express": "4.16.0"
|
||||||
}
|
}
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
الطريقة الثانية هي أن مجلدًا جديدًا يسمى `node_modules` ظهر فجأة في جذر دليل مشروعنا. يخزن هذا المجلد الحزم التي نثبتها محليًا في مشروعنا.
|
الطريقة الثانية هي أن مجلدًا جديدًا يسمى `node_modules` ظهر فجأة في جذر دليل مشروعنا. يخزن هذا المجلد الحزم التي نثبتها محليًا في مشروعنا.
|
||||||
|
|
||||||
@ -89,18 +94,20 @@ Express هو إطار Node.js الأكثر شيوعًا لأنه يتطلب ال
|
|||||||
|
|
||||||
لاستخدام حزمة التثبيت الخاصة بنا لإطار Express وإنشاء تطبيق خادم بسيط ، سنقوم بإنشاء الملف ، `index.js` ، في جذر دليل مشروعنا.
|
لاستخدام حزمة التثبيت الخاصة بنا لإطار Express وإنشاء تطبيق خادم بسيط ، سنقوم بإنشاء الملف ، `index.js` ، في جذر دليل مشروعنا.
|
||||||
|
|
||||||
`const express = require('express');
|
```javascript
|
||||||
const app = express();
|
const express = require('express');
|
||||||
|
const app = express();
|
||||||
app.get('/', (req, res) => res.send('Hello World!'));
|
|
||||||
|
app.get('/', (req, res) => res.send('Hello World!'));
|
||||||
app.listen(3000, () => console.log('Example app listening on port 3000!'));
|
|
||||||
`
|
app.listen(3000, () => console.log('Example app listening on port 3000!'));
|
||||||
|
```
|
||||||
|
|
||||||
لبدء تشغيل الخادم ، انتقل إلى جهازك واكتب:
|
لبدء تشغيل الخادم ، انتقل إلى جهازك واكتب:
|
||||||
|
|
||||||
`node index.js
|
```shell
|
||||||
`
|
node index.js
|
||||||
|
```
|
||||||
|
|
||||||
هذا سيبدأ الخادم. سوف يستمع هذا التطبيق الحد الأدنى على المنفذ 3000. نحن نقدم طلبا من خلال متصفحنا على `http://localhost:3000` وسوف يستجيب الخادم الخاص بنا مع `Hello World` حيث يكون المتصفح هو العميل وستظهر الرسالة هناك.
|
هذا سيبدأ الخادم. سوف يستمع هذا التطبيق الحد الأدنى على المنفذ 3000. نحن نقدم طلبا من خلال متصفحنا على `http://localhost:3000` وسوف يستجيب الخادم الخاص بنا مع `Hello World` حيث يكون المتصفح هو العميل وستظهر الرسالة هناك.
|
||||||
|
|
||||||
@ -148,8 +155,9 @@ Express هو إطار Node.js الأكثر شيوعًا لأنه يتطلب ال
|
|||||||
|
|
||||||
يمكن أن تكون المسارات إما صفحات ويب قديمة جيدة أو نقاط نهاية REST API. في كلتا الحالتين ، يمكن تعريف بناء الجملة على أنه بناء مماثل لطريق ما على النحو التالي:
|
يمكن أن تكون المسارات إما صفحات ويب قديمة جيدة أو نقاط نهاية REST API. في كلتا الحالتين ، يمكن تعريف بناء الجملة على أنه بناء مماثل لطريق ما على النحو التالي:
|
||||||
|
|
||||||
`app.METHOD(PATH, HANDLER);
|
```javascript
|
||||||
`
|
app.METHOD(PATH, HANDLER);
|
||||||
|
```
|
||||||
|
|
||||||
تساعد أجهزة التوجيه في فصل المخاوف مثل نقاط النهاية المختلفة والحفاظ على الأجزاء ذات الصلة من شفرة المصدر معًا. يساعدون في بناء كود قابل للصيانة. يتم تعريف جميع الطرق قبل استدعاء الدالة `app.listen()` . في تطبيق Express النموذجي ، `app.listen()` آخر وظيفة يتم تنفيذها.
|
تساعد أجهزة التوجيه في فصل المخاوف مثل نقاط النهاية المختلفة والحفاظ على الأجزاء ذات الصلة من شفرة المصدر معًا. يساعدون في بناء كود قابل للصيانة. يتم تعريف جميع الطرق قبل استدعاء الدالة `app.listen()` . في تطبيق Express النموذجي ، `app.listen()` آخر وظيفة يتم تنفيذها.
|
||||||
|
|
||||||
@ -157,9 +165,10 @@ Express هو إطار Node.js الأكثر شيوعًا لأنه يتطلب ال
|
|||||||
|
|
||||||
HTTP هو بروتوكول قياسي لعميل وخادم للاتصال. يوفر أساليب مختلفة للعميل لتقديم الطلب. يحتوي كل مسار على وظيفة hanlder على الأقل أو رد اتصال. تحدد وظيفة رد الاتصال هذه ما ستكون الاستجابة من الخادم لهذا المسار بعينه. على سبيل المثال ، يتم استخدام مسار `app.get()` لمعالجة طلبات GET وفي المقابل إرسال رسالة بسيطة كرد.
|
HTTP هو بروتوكول قياسي لعميل وخادم للاتصال. يوفر أساليب مختلفة للعميل لتقديم الطلب. يحتوي كل مسار على وظيفة hanlder على الأقل أو رد اتصال. تحدد وظيفة رد الاتصال هذه ما ستكون الاستجابة من الخادم لهذا المسار بعينه. على سبيل المثال ، يتم استخدام مسار `app.get()` لمعالجة طلبات GET وفي المقابل إرسال رسالة بسيطة كرد.
|
||||||
|
|
||||||
`// GET method route
|
```javascript
|
||||||
app.get('/', (req, res) => res.send('Hello World!'));
|
// GET method route
|
||||||
`
|
app.get('/', (req, res) => res.send('Hello World!'));
|
||||||
|
```
|
||||||
|
|
||||||
### مسارات التوجيه
|
### مسارات التوجيه
|
||||||
|
|
||||||
@ -167,13 +176,14 @@ HTTP هو بروتوكول قياسي لعميل وخادم للاتصال. يو
|
|||||||
|
|
||||||
دعنا نحدد نقطتي نهايتين أخريين في تطبيقنا القائم على الخادم.
|
دعنا نحدد نقطتي نهايتين أخريين في تطبيقنا القائم على الخادم.
|
||||||
|
|
||||||
`app.get('/home', (req, res) => {
|
```javascript
|
||||||
res.send('Home Page');
|
app.get('/home', (req, res) => {
|
||||||
});
|
res.send('Home Page');
|
||||||
app.get('/about', (req, res) => {
|
});
|
||||||
res.send('About');
|
app.get('/about', (req, res) => {
|
||||||
});
|
res.send('About');
|
||||||
`
|
});
|
||||||
|
```
|
||||||
|
|
||||||
ضع في اعتبارك الشفرة الموضحة أعلاه كحد أدنى لموقع الويب الذي يحتوي على نقطتي نهايتين ، و `/about` أو `/home` و `/about` . إذا قدم العميل طلبًا للصفحة الرئيسية ، فسيتم الرد فقط مع `Home Page` وسيقوم `/about` بإرسال الاستجابة: `About Page` . نحن نستخدم وظيفة `res.send` لإرسال السلسلة مرة أخرى إلى العميل في حالة تحديد أي من الطريقتين المحددتين.
|
ضع في اعتبارك الشفرة الموضحة أعلاه كحد أدنى لموقع الويب الذي يحتوي على نقطتي نهايتين ، و `/about` أو `/home` و `/about` . إذا قدم العميل طلبًا للصفحة الرئيسية ، فسيتم الرد فقط مع `Home Page` وسيقوم `/about` بإرسال الاستجابة: `About Page` . نحن نستخدم وظيفة `res.send` لإرسال السلسلة مرة أخرى إلى العميل في حالة تحديد أي من الطريقتين المحددتين.
|
||||||
|
|
||||||
@ -181,18 +191,20 @@ HTTP هو بروتوكول قياسي لعميل وخادم للاتصال. يو
|
|||||||
|
|
||||||
تسمى معلمات المسار شرائح عناوين URL التي يتم استخدامها لالتقاط القيم المحددة في موضعها في عنوان URL. يتم استخدام كائن `req.params` في هذه الحالة لأنه لديه حق الوصول إلى جميع المعلمات التي تم تمريرها في عنوان url.
|
تسمى معلمات المسار شرائح عناوين URL التي يتم استخدامها لالتقاط القيم المحددة في موضعها في عنوان URL. يتم استخدام كائن `req.params` في هذه الحالة لأنه لديه حق الوصول إلى جميع المعلمات التي تم تمريرها في عنوان url.
|
||||||
|
|
||||||
`app.get('/books/:bookId', (req, res) => {
|
```javascript
|
||||||
res.send(req.params);
|
app.get('/books/:bookId', (req, res) => {
|
||||||
});
|
res.send(req.params);
|
||||||
`
|
});
|
||||||
|
```
|
||||||
|
|
||||||
سيكون عنوان URL من العميل الوارد في شفرة المصدر أعلاه `http://localhost:3000/books/23` . يجب أن يتكون اسم معلمات المسار من أحرف (\[A-Za-z0-9\_\]). حالة استخدام عامة جدًا لمعلمة توجيه في طلبنا هي الحصول على مسار 404.
|
سيكون عنوان URL من العميل الوارد في شفرة المصدر أعلاه `http://localhost:3000/books/23` . يجب أن يتكون اسم معلمات المسار من أحرف (\[A-Za-z0-9\_\]). حالة استخدام عامة جدًا لمعلمة توجيه في طلبنا هي الحصول على مسار 404.
|
||||||
|
|
||||||
`// For invalid routes
|
```javascript
|
||||||
app.get('*', (req, res) => {
|
// For invalid routes
|
||||||
res.send('404! This is an invalid URL.');
|
app.get('*', (req, res) => {
|
||||||
});
|
res.send('404! This is an invalid URL.');
|
||||||
`
|
});
|
||||||
|
```
|
||||||
|
|
||||||
إذا بدأنا الآن الخادم من سطر الأوامر باستخدام `node index.js` وحاول زيارة عنوان URL: `http://localhost:3000/abcd` . ردا على ذلك ، سوف نحصل على رسالة 404.
|
إذا بدأنا الآن الخادم من سطر الأوامر باستخدام `node index.js` وحاول زيارة عنوان URL: `http://localhost:3000/abcd` . ردا على ذلك ، سوف نحصل على رسالة 404.
|
||||||
|
|
||||||
@ -232,38 +244,41 @@ HTTP هو بروتوكول قياسي لعميل وخادم للاتصال. يو
|
|||||||
|
|
||||||
لإعداد أي برامج وسيطة ، سواء كانت مخصصة أو متوفرة كوحدة نمطية في npm ، نستخدم وظيفة `app.use()` . إنها كقاعدة معلمة اختيارية واحدة واستدعاء واحد للمعلمة الإلزامية. في حالتنا ، نحن لا نستخدم مسار paramaeter اختياري.
|
لإعداد أي برامج وسيطة ، سواء كانت مخصصة أو متوفرة كوحدة نمطية في npm ، نستخدم وظيفة `app.use()` . إنها كقاعدة معلمة اختيارية واحدة واستدعاء واحد للمعلمة الإلزامية. في حالتنا ، نحن لا نستخدم مسار paramaeter اختياري.
|
||||||
|
|
||||||
`app.use((req, res, next) => {
|
```javascript
|
||||||
console.log('A new request received at ' + Date.now());
|
app.use((req, res, next) => {
|
||||||
next();
|
console.log('A new request received at ' + Date.now());
|
||||||
});
|
next();
|
||||||
`
|
});
|
||||||
|
```
|
||||||
|
|
||||||
يتم استدعاء الدالة الوسيطة أعلاه لكل طلب يقدمه العميل. عند تشغيل الخادم ، ستلاحظ أنه بالنسبة لكل طلب متصفح في نقطة النهاية `/` ، ستتم مطالبتك برسالة في جهازك:
|
يتم استدعاء الدالة الوسيطة أعلاه لكل طلب يقدمه العميل. عند تشغيل الخادم ، ستلاحظ أنه بالنسبة لكل طلب متصفح في نقطة النهاية `/` ، ستتم مطالبتك برسالة في جهازك:
|
||||||
|
|
||||||
`A new request received at 1467267512545
|
```shell
|
||||||
`
|
A new request received at 1467267512545
|
||||||
|
```
|
||||||
|
|
||||||
يمكن استخدام وظائف الوسيطيات لمسار معين. انظر المثال أدناه:
|
يمكن استخدام وظائف الوسيطيات لمسار معين. انظر المثال أدناه:
|
||||||
|
|
||||||
`const express = require('express');
|
```javascript
|
||||||
const app = express();
|
const express = require('express');
|
||||||
|
const app = express();
|
||||||
//Simple request time logger for a specific route
|
|
||||||
app.use('/home', (req, res, next) => {
|
//Simple request time logger for a specific route
|
||||||
console.log('A new request received at ' + Date.now());
|
app.use('/home', (req, res, next) => {
|
||||||
next();
|
console.log('A new request received at ' + Date.now());
|
||||||
});
|
next();
|
||||||
|
});
|
||||||
app.get('/home', (req, res) => {
|
|
||||||
res.send('Home Page');
|
app.get('/home', (req, res) => {
|
||||||
});
|
res.send('Home Page');
|
||||||
|
});
|
||||||
app.get('/about', (req, res) => {
|
|
||||||
res.send('About Page');
|
app.get('/about', (req, res) => {
|
||||||
});
|
res.send('About Page');
|
||||||
|
});
|
||||||
app.listen(3000, () => console.log('Example app listening on port 3000!'));
|
|
||||||
`
|
app.listen(3000, () => console.log('Example app listening on port 3000!'));
|
||||||
|
```
|
||||||
|
|
||||||
في هذه المرة ، سترى مطالبة مشابهة فقط عندما يطلب العميل نقطة النهاية `/home` منذ الإشارة إلى المسار في `app.use()` . لن يتم عرض أي شيء في المحطة عندما يطلب العميل نقطة النهاية `/about` .
|
في هذه المرة ، سترى مطالبة مشابهة فقط عندما يطلب العميل نقطة النهاية `/home` منذ الإشارة إلى المسار في `app.use()` . لن يتم عرض أي شيء في المحطة عندما يطلب العميل نقطة النهاية `/about` .
|
||||||
|
|
||||||
@ -281,19 +296,21 @@ HTTP هو بروتوكول قياسي لعميل وخادم للاتصال. يو
|
|||||||
|
|
||||||
يسمح للمطورين بمعالجة البيانات الواردة ، مثل حمولة الجسم. الحمولة هي البيانات التي نتلقاها من العميل حتى تتم معالجتها. الأكثر فائدة مع طرق POST. يتم تثبيته باستخدام:
|
يسمح للمطورين بمعالجة البيانات الواردة ، مثل حمولة الجسم. الحمولة هي البيانات التي نتلقاها من العميل حتى تتم معالجتها. الأكثر فائدة مع طرق POST. يتم تثبيته باستخدام:
|
||||||
|
|
||||||
`npm install --save body-parser
|
```shell
|
||||||
`
|
npm install --save body-parser
|
||||||
|
```
|
||||||
|
|
||||||
الاستعمال:
|
الاستعمال:
|
||||||
|
|
||||||
`const bodyParser = require('body-parser');
|
```javascript
|
||||||
|
const bodyParser = require('body-parser');
|
||||||
// To parse URL encoded data
|
|
||||||
app.use(bodyParser.urlencoded({ extended: false }));
|
// To parse URL encoded data
|
||||||
|
app.use(bodyParser.urlencoded({ extended: false }));
|
||||||
// To parse json data
|
|
||||||
app.use(bodyParser.json());
|
// To parse json data
|
||||||
`
|
app.use(bodyParser.json());
|
||||||
|
```
|
||||||
|
|
||||||
من المحتمل أنها واحدة من أكثر استخدامات الوسيطة من طرف ثالث في أي تطبيق اكسبرس.
|
من المحتمل أنها واحدة من أكثر استخدامات الوسيطة من طرف ثالث في أي تطبيق اكسبرس.
|
||||||
|
|
||||||
@ -301,41 +318,47 @@ HTTP هو بروتوكول قياسي لعميل وخادم للاتصال. يو
|
|||||||
|
|
||||||
يوزع رأس ملف تعريف الارتباط `req.cookies` مع كائن مرتبط بأسماء ملفات تعريف الارتباط. لتثبيته ،
|
يوزع رأس ملف تعريف الارتباط `req.cookies` مع كائن مرتبط بأسماء ملفات تعريف الارتباط. لتثبيته ،
|
||||||
|
|
||||||
`$ npm install --save cookie-parser
|
```shell
|
||||||
`
|
$ npm install --save cookie-parser
|
||||||
|
```
|
||||||
|
|
||||||
`const cookieParser = require('cookie-parser');
|
```javascript
|
||||||
app.use(cookieParser());
|
const cookieParser = require('cookie-parser');
|
||||||
`
|
app.use(cookieParser());
|
||||||
|
```
|
||||||
|
|
||||||
#### جلسة
|
#### جلسة
|
||||||
|
|
||||||
تقوم وظيفة الوسيطة هذه بإنشاء وسيط جلسة مع خيارات محددة. غالبًا ما يتم استخدام جلسة في تطبيقات مثل تسجيل الدخول / التسجيل.
|
تقوم وظيفة الوسيطة هذه بإنشاء وسيط جلسة مع خيارات محددة. غالبًا ما يتم استخدام جلسة في تطبيقات مثل تسجيل الدخول / التسجيل.
|
||||||
|
|
||||||
`$ npm install --save session
|
```shell
|
||||||
`
|
$ npm install --save session
|
||||||
|
```
|
||||||
|
|
||||||
`app.use(
|
```javascript
|
||||||
session({
|
app.use(
|
||||||
secret: 'arbitary-string',
|
session({
|
||||||
resave: false,
|
secret: 'arbitary-string',
|
||||||
saveUninitialized: true,
|
resave: false,
|
||||||
cookie: { secure: true }
|
saveUninitialized: true,
|
||||||
})
|
cookie: { secure: true }
|
||||||
);
|
})
|
||||||
`
|
);
|
||||||
|
```
|
||||||
|
|
||||||
### مورغان
|
### مورغان
|
||||||
|
|
||||||
يقوم البرنامج الوسيط مورغان بتتبع جميع الطلبات وغيرها من المعلومات المهمة اعتمادًا على تنسيق الإخراج المحدد.
|
يقوم البرنامج الوسيط مورغان بتتبع جميع الطلبات وغيرها من المعلومات المهمة اعتمادًا على تنسيق الإخراج المحدد.
|
||||||
|
|
||||||
`npm install --save morgan
|
```shell
|
||||||
`
|
npm install --save morgan
|
||||||
|
```
|
||||||
|
|
||||||
`const logger = require('morgan');
|
```javascript
|
||||||
// ... Configurations
|
const logger = require('morgan');
|
||||||
app.use(logger('common'));
|
// ... Configurations
|
||||||
`
|
app.use(logger('common'));
|
||||||
|
```
|
||||||
|
|
||||||
`common` هو حالة تنسيق مسبق يمكن استخدامها في التطبيق. هناك تنسيقات أخرى محددة مسبقًا مثل صغيرة ومبتكر ، ولكن يمكنك تحديد أنك تملك تنسيقًا مخصصًا أيضًا باستخدام معلمات السلسلة المتوفرة لنا من قِبل morgan.
|
`common` هو حالة تنسيق مسبق يمكن استخدامها في التطبيق. هناك تنسيقات أخرى محددة مسبقًا مثل صغيرة ومبتكر ، ولكن يمكنك تحديد أنك تملك تنسيقًا مخصصًا أيضًا باستخدام معلمات السلسلة المتوفرة لنا من قِبل morgan.
|
||||||
|
|
||||||
@ -349,39 +372,44 @@ HTTP هو بروتوكول قياسي لعميل وخادم للاتصال. يو
|
|||||||
|
|
||||||
بشكل افتراضي ، لا يسمح Express بخدمة الملفات الثابتة. علينا استخدام هذه الوظيفة الوسيطة. من الممارسات الشائعة في تطوير تطبيق الويب هو تخزين جميع الملفات الثابتة تحت الدليل "العام" في جذر المشروع. يمكننا تقديم هذا المجلد لخدمة ملفات ثابتة تتضمن الكتابة في ملف `index.js` :
|
بشكل افتراضي ، لا يسمح Express بخدمة الملفات الثابتة. علينا استخدام هذه الوظيفة الوسيطة. من الممارسات الشائعة في تطوير تطبيق الويب هو تخزين جميع الملفات الثابتة تحت الدليل "العام" في جذر المشروع. يمكننا تقديم هذا المجلد لخدمة ملفات ثابتة تتضمن الكتابة في ملف `index.js` :
|
||||||
|
|
||||||
`app.use(express.static('public'));
|
```javascript
|
||||||
`
|
app.use(express.static('public'));
|
||||||
|
```
|
||||||
|
|
||||||
الآن ، سيتم تحميل الملفات الثابتة في دليلنا العام.
|
الآن ، سيتم تحميل الملفات الثابتة في دليلنا العام.
|
||||||
|
|
||||||
`http://localhost:3000/css/style.css
|
```shell
|
||||||
http://localhost:3000/images/logo.png
|
http://localhost:3000/css/style.css
|
||||||
http://localhost:3000/images/bg.png
|
http://localhost:3000/images/logo.png
|
||||||
http://localhost:3000/index.html
|
http://localhost:3000/images/bg.png
|
||||||
`
|
http://localhost:3000/index.html
|
||||||
|
```
|
||||||
|
|
||||||
### أدلة ثابتة متعددة
|
### أدلة ثابتة متعددة
|
||||||
|
|
||||||
لاستخدام العديد من دلائل الأصول الثابتة ، اتصل بوظيفة الوسيطة `express.static` عدة مرات:
|
لاستخدام العديد من دلائل الأصول الثابتة ، اتصل بوظيفة الوسيطة `express.static` عدة مرات:
|
||||||
|
|
||||||
`app.use(express.static('public'));
|
```javascript
|
||||||
app.use(express.static('files'));
|
app.use(express.static('public'));
|
||||||
`
|
app.use(express.static('files'));
|
||||||
|
```
|
||||||
|
|
||||||
### المسار الافتراضي البادئة
|
### المسار الافتراضي البادئة
|
||||||
|
|
||||||
يمكن أيضًا توفير بادئة مسار الإصلاح كوسيطة أولى للدالة الوسيطة `express.static` . يُعرف هذا _بادئة مسار افتراضي_ لأن المسار الفعلي غير موجود في المشروع.
|
يمكن أيضًا توفير بادئة مسار الإصلاح كوسيطة أولى للدالة الوسيطة `express.static` . يُعرف هذا _بادئة مسار افتراضي_ لأن المسار الفعلي غير موجود في المشروع.
|
||||||
|
|
||||||
`app.use('/static', express.static('public'));
|
```javascript
|
||||||
`
|
app.use('/static', express.static('public'));
|
||||||
|
```
|
||||||
|
|
||||||
إذا حاولنا الآن تحميل الملفات:
|
إذا حاولنا الآن تحميل الملفات:
|
||||||
|
|
||||||
`http://localhost:3000/static/css/style.css
|
```shell
|
||||||
http://localhost:3000/static/images/logo.png
|
http://localhost:3000/static/css/style.css
|
||||||
http://localhost:3000/static/images/bg.png
|
http://localhost:3000/static/images/logo.png
|
||||||
http://localhost:3000/static/index.html
|
http://localhost:3000/static/images/bg.png
|
||||||
`
|
http://localhost:3000/static/index.html
|
||||||
|
```
|
||||||
|
|
||||||
هذه التقنية تأتي في متناول اليدين عند توفير أدلة متعددة لخدمة ملفات ثابتة. يتم استخدام البادئات للمساعدة في التمييز بين الدلائل المتعددة.
|
هذه التقنية تأتي في متناول اليدين عند توفير أدلة متعددة لخدمة ملفات ثابتة. يتم استخدام البادئات للمساعدة في التمييز بين الدلائل المتعددة.
|
||||||
|
|
||||||
@ -391,14 +419,16 @@ HTTP هو بروتوكول قياسي لعميل وخادم للاتصال. يو
|
|||||||
|
|
||||||
لشرح كيفية استخدام "محرك القوالب" ، سنستخدم Pug. إنه محرك قالب قوي يوفر ميزات مثل الفلاتر ، ويشمل ، الاستيفاء ، وما إلى ذلك. لاستخدامها ، يجب علينا أولاً تثبيت كوحدة نمطية في مشروعنا باستخدام `npm` .
|
لشرح كيفية استخدام "محرك القوالب" ، سنستخدم Pug. إنه محرك قالب قوي يوفر ميزات مثل الفلاتر ، ويشمل ، الاستيفاء ، وما إلى ذلك. لاستخدامها ، يجب علينا أولاً تثبيت كوحدة نمطية في مشروعنا باستخدام `npm` .
|
||||||
|
|
||||||
`npm install --save pug
|
```shell
|
||||||
`
|
npm install --save pug
|
||||||
|
```
|
||||||
|
|
||||||
سيقوم هذا الأمر بتثبيت الصلصة وللتحقق من تثبيتها بشكل صحيح ، فقط ألقي نظرة على ملف `package.json` . لاستخدامه مع تطبيقنا أولاً ، يجب علينا تعيينه كمحرك قالب وإنشاء دليل جديد ".views" حيث سنقوم بتخزين كافة الملفات المتعلقة بمحرك القالب الخاص بنا.
|
سيقوم هذا الأمر بتثبيت الصلصة وللتحقق من تثبيتها بشكل صحيح ، فقط ألقي نظرة على ملف `package.json` . لاستخدامه مع تطبيقنا أولاً ، يجب علينا تعيينه كمحرك قالب وإنشاء دليل جديد ".views" حيث سنقوم بتخزين كافة الملفات المتعلقة بمحرك القالب الخاص بنا.
|
||||||
|
|
||||||
`app.set('view engine', 'pug');
|
```javascript
|
||||||
app.set('views', './views');
|
app.set('view engine', 'pug');
|
||||||
`
|
app.set('views', './views');
|
||||||
|
```
|
||||||
|
|
||||||
بما أننا نستخدم `app.set()` الذي يشير إلى التكوين داخل ملف الخادم الخاص بنا ، يجب أن `app.set()` قبل تحديد أي مسار أو وظيفة وسيطة.
|
بما أننا نستخدم `app.set()` الذي يشير إلى التكوين داخل ملف الخادم الخاص بنا ، يجب أن `app.set()` قبل تحديد أي مسار أو وظيفة وسيطة.
|
||||||
|
|
||||||
@ -414,46 +444,49 @@ HTTP هو بروتوكول قياسي لعميل وخادم للاتصال. يو
|
|||||||
|
|
||||||
لتشغيل هذه الصفحة ، سنقوم بإضافة الطريق التالي إلى طلبنا.
|
لتشغيل هذه الصفحة ، سنقوم بإضافة الطريق التالي إلى طلبنا.
|
||||||
|
|
||||||
`app.get('/hello', (req, res) => {
|
```javascript
|
||||||
res.render('index');
|
app.get('/hello', (req, res) => {
|
||||||
});
|
res.render('index');
|
||||||
`
|
});
|
||||||
|
```
|
||||||
|
|
||||||
نظرًا لأننا قمنا بالفعل بتعيين `res.render` كمحرك القالب الخاص بنا ، فإننا في `res.render` لا نحتاج إلى توفير ملحق `.pug` . تعرض هذه الوظيفة الكود في أي ملف `.pug` إلى HTML `.pug` العميل. يمكن للمتصفحات تقديم ملفات HTML فقط. إذا قمت بتشغيل الخادم الآن ، وقمت بزيارة المسار `http://localhost:3000/hello` فسوف تشاهد إخراج `Hello World` بشكل صحيح.
|
نظرًا لأننا قمنا بالفعل بتعيين `res.render` كمحرك القالب الخاص بنا ، فإننا في `res.render` لا نحتاج إلى توفير ملحق `.pug` . تعرض هذه الوظيفة الكود في أي ملف `.pug` إلى HTML `.pug` العميل. يمكن للمتصفحات تقديم ملفات HTML فقط. إذا قمت بتشغيل الخادم الآن ، وقمت بزيارة المسار `http://localhost:3000/hello` فسوف تشاهد إخراج `Hello World` بشكل صحيح.
|
||||||
|
|
||||||
في Pug ، يجب أن تلاحظ أننا لا نحتاج إلى كتابة علامات الإغلاق إلى العناصر كما نفعل في HTML. سيتم تقديم الكود السابق في HTML على النحو التالي:
|
في Pug ، يجب أن تلاحظ أننا لا نحتاج إلى كتابة علامات الإغلاق إلى العناصر كما نفعل في HTML. سيتم تقديم الكود السابق في HTML على النحو التالي:
|
||||||
|
|
||||||
`
|
```html
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>Hello from Pug</title>
|
<title>Hello from Pug</title>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<p class = "greetings">Hello World!</p>
|
<p class = "greetings">Hello World!</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
`
|
```
|
||||||
|
|
||||||
ميزة استخدام "محرك القوالب" على ملفات HTML الخام هو أنها توفر الدعم لتنفيذ المهام عبر البيانات. لا يمكن لـ HTML تقديم البيانات مباشرة. تشترك الأطر مثل Angular و React في هذا السلوك مع محركات القوالب.
|
ميزة استخدام "محرك القوالب" على ملفات HTML الخام هو أنها توفر الدعم لتنفيذ المهام عبر البيانات. لا يمكن لـ HTML تقديم البيانات مباشرة. تشترك الأطر مثل Angular و React في هذا السلوك مع محركات القوالب.
|
||||||
|
|
||||||
يمكنك أيضًا تمرير القيم إلى محرك القالب مباشرةً من وظيفة معالج التوجيه.
|
يمكنك أيضًا تمرير القيم إلى محرك القالب مباشرةً من وظيفة معالج التوجيه.
|
||||||
|
|
||||||
`app.get('/', (req, res) => {
|
```javascript
|
||||||
res.render('index', { title: 'Hello from Pug', message: 'Hello World!' });
|
app.get('/', (req, res) => {
|
||||||
});
|
res.render('index', { title: 'Hello from Pug', message: 'Hello World!' });
|
||||||
`
|
});
|
||||||
|
```
|
||||||
|
|
||||||
للحالة أعلاه ، سيتم كتابة ملف `index.pug` بنا على النحو التالي:
|
للحالة أعلاه ، سيتم كتابة ملف `index.pug` بنا على النحو التالي:
|
||||||
|
|
||||||
`doctype html
|
```pug
|
||||||
html
|
doctype html
|
||||||
head
|
html
|
||||||
title= title
|
head
|
||||||
body
|
title= title
|
||||||
h1= message
|
body
|
||||||
`
|
h1= message
|
||||||
|
```
|
||||||
|
|
||||||
سيكون الإخراج نفس الحالة السابقة.
|
سيكون الإخراج نفس الحالة السابقة.
|
||||||
|
|
||||||
@ -463,30 +496,31 @@ HTTP هو بروتوكول قياسي لعميل وخادم للاتصال. يو
|
|||||||
|
|
||||||
دعونا نذهب من خلال strucutre نموذجي لتطبيق ويب عبر الإنترنت.
|
دعونا نذهب من خلال strucutre نموذجي لتطبيق ويب عبر الإنترنت.
|
||||||
|
|
||||||
`project-root/
|
```
|
||||||
node_modules/ // This is where the packages installed are stored
|
project-root/
|
||||||
config/
|
node_modules/ // This is where the packages installed are stored
|
||||||
db.js // Database connection and configuration
|
config/
|
||||||
credentials.js // Passwords/API keys for external services used by your app
|
db.js // Database connection and configuration
|
||||||
config.js // Environment variables
|
credentials.js // Passwords/API keys for external services used by your app
|
||||||
models/ // For mongoose schemas
|
config.js // Environment variables
|
||||||
books.js
|
models/ // For mongoose schemas
|
||||||
things.js
|
books.js
|
||||||
routes/ // All routes for different entities in different files
|
things.js
|
||||||
books.js
|
routes/ // All routes for different entities in different files
|
||||||
things.js
|
books.js
|
||||||
views/
|
things.js
|
||||||
index.pug
|
views/
|
||||||
404.pug
|
index.pug
|
||||||
...
|
404.pug
|
||||||
public/ // All static files
|
...
|
||||||
images/
|
public/ // All static files
|
||||||
css/
|
images/
|
||||||
javascript/
|
css/
|
||||||
app.js
|
javascript/
|
||||||
routes.js // Require all routes in this and then require this file in
|
app.js
|
||||||
app.js
|
routes.js // Require all routes in this and then require this file in
|
||||||
package.json
|
app.js
|
||||||
`
|
package.json
|
||||||
|
```
|
||||||
|
|
||||||
هذا هو النمط المعروف باسم MVC ، عارض عرض نموذج. ببساطة لأن نموذج قاعدة البيانات ، واجهة المستخدم الخاصة بالتطبيق ووحدات التحكم (في حالتنا ، الطرق) مكتوبة ومحفوظة في ملفات منفصلة. نمط التصميم هذا الذي يجعل أي تطبيق ويب سهل القياس إذا كنت ترغب في تقديم المزيد من المسارات أو الملفات الثابتة في المستقبل والرمز قابل للصيانة.
|
هذا هو النمط المعروف باسم MVC ، عارض عرض نموذج. ببساطة لأن نموذج قاعدة البيانات ، واجهة المستخدم الخاصة بالتطبيق ووحدات التحكم (في حالتنا ، الطرق) مكتوبة ومحفوظة في ملفات منفصلة. نمط التصميم هذا الذي يجعل أي تطبيق ويب سهل القياس إذا كنت ترغب في تقديم المزيد من المسارات أو الملفات الثابتة في المستقبل والرمز قابل للصيانة.
|
@ -10,8 +10,9 @@ localeTitle: نظام الملفات
|
|||||||
|
|
||||||
من أجل تضمين وحدة نمطية ، استخدم الدالة `require()` مع اسم الوحدة.
|
من أجل تضمين وحدة نمطية ، استخدم الدالة `require()` مع اسم الوحدة.
|
||||||
|
|
||||||
`const fs = require('fs');
|
```javascript
|
||||||
`
|
const fs = require('fs');
|
||||||
|
```
|
||||||
|
|
||||||
الاستخدام الشائع لوحدة نظام الملفات:
|
الاستخدام الشائع لوحدة نظام الملفات:
|
||||||
|
|
||||||
@ -27,16 +28,17 @@ localeTitle: نظام الملفات
|
|||||||
|
|
||||||
رمز Node.js لقراءة الملف من جهاز الكمبيوتر وإرجاع المحتوى إلى وحدة التحكم.
|
رمز Node.js لقراءة الملف من جهاز الكمبيوتر وإرجاع المحتوى إلى وحدة التحكم.
|
||||||
|
|
||||||
`const fs = require('fs');
|
```javascript
|
||||||
fs.readFile('input.txt', 'utf-8', (err, data) => {
|
const fs = require('fs');
|
||||||
|
fs.readFile('input.txt', 'utf-8', (err, data) => {
|
||||||
if(err){
|
if(err){
|
||||||
console.log(err);
|
console.log(err);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
console.log("Content present in input.txt file : " + data.toString());
|
console.log("Content present in input.txt file : " + data.toString());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
`
|
```
|
||||||
|
|
||||||
يقرأ الكود أعلاه ملف _input.txt_ من جهاز الكمبيوتر ويعيد المحتوى إلى وحدة التحكم.
|
يقرأ الكود أعلاه ملف _input.txt_ من جهاز الكمبيوتر ويعيد المحتوى إلى وحدة التحكم.
|
||||||
|
|
||||||
|
@ -10,24 +10,26 @@ localeTitle: HTTP
|
|||||||
|
|
||||||
من أجل تضمين وحدة نمطية ، استخدم الدالة `require()` مع اسم الوحدة.
|
من أجل تضمين وحدة نمطية ، استخدم الدالة `require()` مع اسم الوحدة.
|
||||||
|
|
||||||
`const http = require('http');
|
```javascript
|
||||||
`
|
const http = require('http');
|
||||||
|
```
|
||||||
|
|
||||||
## Node.js كملقم ويب
|
## Node.js كملقم ويب
|
||||||
|
|
||||||
يتم استخدام الأسلوب `createServer()` لإنشاء خادم HTTP. الوسيطة الأولى من أسلوب `res.writeHead()` هي رمز الحالة ، `200` يعني أن كل شيء على ما يرام ، والوسيطة الثانية هي كائن يحتوي على رؤوس الاستجابة.
|
يتم استخدام الأسلوب `createServer()` لإنشاء خادم HTTP. الوسيطة الأولى من أسلوب `res.writeHead()` هي رمز الحالة ، `200` يعني أن كل شيء على ما يرام ، والوسيطة الثانية هي كائن يحتوي على رؤوس الاستجابة.
|
||||||
|
|
||||||
`const http = require('http');
|
```javascript
|
||||||
|
const http = require('http');
|
||||||
|
|
||||||
//create a server object:
|
//create a server object:
|
||||||
http.createServer((req, res) => {
|
http.createServer((req, res) => {
|
||||||
res.writeHead(200, {'Content-Type': 'text/plain'});
|
res.writeHead(200, {'Content-Type': 'text/plain'});
|
||||||
res.write('Hello World!'); //write a response to the client
|
res.write('Hello World!'); //write a response to the client
|
||||||
res.end(); //end the response
|
res.end(); //end the response
|
||||||
}).listen(8000); //the server object listens on port 8000
|
}).listen(8000); //the server object listens on port 8000
|
||||||
|
|
||||||
console.log("Server is listening on port no : 8000");
|
console.log("Server is listening on port no : 8000");
|
||||||
`
|
```
|
||||||
|
|
||||||
### خطوات التنفيذ:
|
### خطوات التنفيذ:
|
||||||
|
|
||||||
|
@ -19,27 +19,29 @@ Node.js هو وقت تشغيل جافا سكريبت مبني على محرك ج
|
|||||||
|
|
||||||
**الثعبان**
|
**الثعبان**
|
||||||
|
|
||||||
`import time
|
```python
|
||||||
|
import time
|
||||||
def my_io_task():
|
|
||||||
time.sleep(5)
|
def my_io_task():
|
||||||
print("done")
|
time.sleep(5)
|
||||||
|
print("done")
|
||||||
my_io_task()
|
|
||||||
my_io_task()
|
my_io_task()
|
||||||
`
|
my_io_task()
|
||||||
|
```
|
||||||
|
|
||||||
**نود.جي إس**
|
**نود.جي إس**
|
||||||
|
|
||||||
`function my_io_task() {
|
```node
|
||||||
setTimeout(function() {
|
function my_io_task() {
|
||||||
console.log('done');
|
setTimeout(function() {
|
||||||
}, 5000);
|
console.log('done');
|
||||||
}
|
}, 5000);
|
||||||
|
}
|
||||||
my_io_task();
|
|
||||||
my_io_task();
|
my_io_task();
|
||||||
`
|
my_io_task();
|
||||||
|
```
|
||||||
|
|
||||||
كلاهما يشبهان لكن الوقت المستغرق في التنفيذ مختلفان. يستغرق رمز python 10 ثوانٍ لتنفيذ بينما يستغرق رمز Node.js 5 ثوانٍ فقط للتنفيذ.
|
كلاهما يشبهان لكن الوقت المستغرق في التنفيذ مختلفان. يستغرق رمز python 10 ثوانٍ لتنفيذ بينما يستغرق رمز Node.js 5 ثوانٍ فقط للتنفيذ.
|
||||||
|
|
||||||
|
@ -12,9 +12,10 @@ localeTitle: الآلية الوقائية الوطنية
|
|||||||
|
|
||||||
لتثبيت `npm` لدينا لتنزيل ثنائيات Nodejs في envrionment المحلي. تتضمن ثنائيات Node.js أحدث إصدار من npm. للتحقق من ذلك:
|
لتثبيت `npm` لدينا لتنزيل ثنائيات Nodejs في envrionment المحلي. تتضمن ثنائيات Node.js أحدث إصدار من npm. للتحقق من ذلك:
|
||||||
|
|
||||||
`npm -v
|
```shell
|
||||||
5.6.0
|
npm -v
|
||||||
`
|
5.6.0
|
||||||
|
```
|
||||||
|
|
||||||
يوفر مدير حزمة العقدة (NPM) وظيفتين رئيسيتين -
|
يوفر مدير حزمة العقدة (NPM) وظيفتين رئيسيتين -
|
||||||
|
|
||||||
@ -31,44 +32,49 @@ localeTitle: الآلية الوقائية الوطنية
|
|||||||
|
|
||||||
ستصبح أي حزم مثبتة عالميًا متوفرة من سطر الأوامر. نستخدم العلامة --global أو g لتثبيت الحزم عالمياً.
|
ستصبح أي حزم مثبتة عالميًا متوفرة من سطر الأوامر. نستخدم العلامة --global أو g لتثبيت الحزم عالمياً.
|
||||||
|
|
||||||
`$ npm install uglify-js --global
|
```shell
|
||||||
`
|
$ npm install uglify-js --global
|
||||||
|
```
|
||||||
|
|
||||||
يمكننا سرد الحزم العالمية التي قمنا بتثبيتها باستخدام الأمر list npm.
|
يمكننا سرد الحزم العالمية التي قمنا بتثبيتها باستخدام الأمر list npm.
|
||||||
|
|
||||||
`$ npm list --global
|
```shell
|
||||||
/usr/local/lib
|
$ npm list --global
|
||||||
├─┬ npm@5.6.0
|
/usr/local/lib
|
||||||
│ ├── abbrev@1.1.0
|
├─┬ npm@5.6.0
|
||||||
│ ├── ansi-regex@2.1.1
|
│ ├── abbrev@1.1.0
|
||||||
│ ├── ansicolors@0.3.2
|
│ ├── ansi-regex@2.1.1
|
||||||
│ ├── ansistyles@0.1.3
|
│ ├── ansicolors@0.3.2
|
||||||
....................
|
│ ├── ansistyles@0.1.3
|
||||||
└─┬ uglify-js@3.0.15
|
....................
|
||||||
├─┬ commander@2.9.0
|
└─┬ uglify-js@3.0.15
|
||||||
│ └── graceful-readlink@1.0.1
|
├─┬ commander@2.9.0
|
||||||
└── source-map@0.5.6
|
│ └── graceful-readlink@1.0.1
|
||||||
`
|
└── source-map@0.5.6
|
||||||
|
```
|
||||||
|
|
||||||
ومع ذلك ، فإن المخرجات مطولة نوعًا ما. يمكننا تغيير ذلك مع الخيار --depth = 0.
|
ومع ذلك ، فإن المخرجات مطولة نوعًا ما. يمكننا تغيير ذلك مع الخيار --depth = 0.
|
||||||
|
|
||||||
`$ npm list -g --depth=0
|
```js
|
||||||
/usr/local/lib
|
$ npm list -g --depth=0
|
||||||
├── npm@5.6.0
|
/usr/local/lib
|
||||||
└── uglify-js@3.0.15
|
├── npm@5.6.0
|
||||||
`
|
└── uglify-js@3.0.15
|
||||||
|
```
|
||||||
|
|
||||||
### تثبيت الحزم في الوضع المحلي
|
### تثبيت الحزم في الوضع المحلي
|
||||||
|
|
||||||
عند تثبيت الحزم محليًا ، فأنت تفعل ذلك عادةً باستخدام ملف package.json.
|
عند تثبيت الحزم محليًا ، فأنت تفعل ذلك عادةً باستخدام ملف package.json.
|
||||||
|
|
||||||
`npm install --save express
|
```shell
|
||||||
`
|
npm install --save express
|
||||||
|
```
|
||||||
|
|
||||||
الآن يمكنك استخدام هذه الوحدة في ملف js الخاص بك كما يلي
|
الآن يمكنك استخدام هذه الوحدة في ملف js الخاص بك كما يلي
|
||||||
|
|
||||||
`const express = require('express');
|
```js
|
||||||
`
|
const express = require('express');
|
||||||
|
```
|
||||||
|
|
||||||
وتنقسم الوحدات المحلية الى مزيد من نوعين من depenedencies: `devDepenednecies` و `dependencies` . الفرق بين هذين ، هو أن devDependencies هي وحدات مطلوبة فقط أثناء التطوير ، في حين أن التبعيات هي وحدات مطلوبة أيضا في وقت التشغيل. لحفظ تبعية باعتبارها devDependency على التثبيت ، نحتاج إلى القيام `npm install --save-dev` ، بدلاً من مجرد `npm install --save` .
|
وتنقسم الوحدات المحلية الى مزيد من نوعين من depenedencies: `devDepenednecies` و `dependencies` . الفرق بين هذين ، هو أن devDependencies هي وحدات مطلوبة فقط أثناء التطوير ، في حين أن التبعيات هي وحدات مطلوبة أيضا في وقت التشغيل. لحفظ تبعية باعتبارها devDependency على التثبيت ، نحتاج إلى القيام `npm install --save-dev` ، بدلاً من مجرد `npm install --save` .
|
||||||
|
|
||||||
@ -78,8 +84,9 @@ localeTitle: الآلية الوقائية الوطنية
|
|||||||
|
|
||||||
للقيام بذلك ، نذكر إصدار الحزمة الذي نريد تثبيته.
|
للقيام بذلك ، نذكر إصدار الحزمة الذي نريد تثبيته.
|
||||||
|
|
||||||
`$ npm install underscore@1.8.2 -S
|
```shell
|
||||||
`
|
$ npm install underscore@1.8.2 -S
|
||||||
|
```
|
||||||
|
|
||||||
لإزالة تبعية عمومية ، استخدم `-g` flag.
|
لإزالة تبعية عمومية ، استخدم `-g` flag.
|
||||||
|
|
||||||
@ -87,8 +94,9 @@ localeTitle: الآلية الوقائية الوطنية
|
|||||||
|
|
||||||
npm هو مدير حزم لذا يجب أن يكون قادرًا على إزالة حزمة. يمكننا إزالة الحزمة:
|
npm هو مدير حزم لذا يجب أن يكون قادرًا على إزالة حزمة. يمكننا إزالة الحزمة:
|
||||||
|
|
||||||
`$ npm uninstall underscore -S
|
```shell
|
||||||
`
|
$ npm uninstall underscore -S
|
||||||
|
```
|
||||||
|
|
||||||
لتحديث تبعية عالمية ، استخدم `-g` flag.
|
لتحديث تبعية عالمية ، استخدم `-g` flag.
|
||||||
|
|
||||||
@ -96,16 +104,18 @@ npm هو مدير حزم لذا يجب أن يكون قادرًا على إزا
|
|||||||
|
|
||||||
لتحديث حزمة ، يمكنك القيام بما يلي:
|
لتحديث حزمة ، يمكنك القيام بما يلي:
|
||||||
|
|
||||||
`$ npm update underscore -S
|
```
|
||||||
`
|
$ npm update underscore -S
|
||||||
|
```
|
||||||
|
|
||||||
للتحقق مما إذا كان هناك تحديث متوفر لأي حزمة مرتبطة بمشروعنا:
|
للتحقق مما إذا كان هناك تحديث متوفر لأي حزمة مرتبطة بمشروعنا:
|
||||||
|
|
||||||
`$ npm outdated
|
```shell
|
||||||
|
$ npm outdated
|
||||||
Package Current Wanted Latest Location
|
|
||||||
underscore 1.8.2 1.8.3 1.8.3 project
|
Package Current Wanted Latest Location
|
||||||
`
|
underscore 1.8.2 1.8.3 1.8.3 project
|
||||||
|
```
|
||||||
|
|
||||||
يعرض العمود الحالي لنا الإصدار المثبت محليًا. يخبرنا العمود الأحدث بأحدث إصدار من الحزمة. يخبرنا العمود "مطلوب" بأحدث إصدار من الحزمة التي يمكننا الترقية إليها دون كسر الشفرة الحالية.
|
يعرض العمود الحالي لنا الإصدار المثبت محليًا. يخبرنا العمود الأحدث بأحدث إصدار من الحزمة. يخبرنا العمود "مطلوب" بأحدث إصدار من الحزمة التي يمكننا الترقية إليها دون كسر الشفرة الحالية.
|
||||||
|
|
||||||
@ -115,17 +125,18 @@ npm هو مدير حزم لذا يجب أن يكون قادرًا على إزا
|
|||||||
|
|
||||||
عند تثبيت الحزم محليًا ، فإنك تحتاج إلى ملف package.json. لتوليد واحدة يمكنك القيام بذلك باستخدام الأمر `npm init` . سيؤدي ذلك إلى طرح بعض الأسئلة عن طريق الضغط على Enter يمكنك الاحتفاظ بالقيم الافتراضية.
|
عند تثبيت الحزم محليًا ، فإنك تحتاج إلى ملف package.json. لتوليد واحدة يمكنك القيام بذلك باستخدام الأمر `npm init` . سيؤدي ذلك إلى طرح بعض الأسئلة عن طريق الضغط على Enter يمكنك الاحتفاظ بالقيم الافتراضية.
|
||||||
|
|
||||||
`$ npm init
|
```shell
|
||||||
package name: (project)
|
$ npm init
|
||||||
version: (1.0.0)
|
package name: (project)
|
||||||
description: Demo of package.json
|
version: (1.0.0)
|
||||||
entry point: (index.js)
|
description: Demo of package.json
|
||||||
test command:
|
entry point: (index.js)
|
||||||
git repository:
|
test command:
|
||||||
keywords:
|
git repository:
|
||||||
author:
|
keywords:
|
||||||
license: (ISC)
|
author:
|
||||||
`
|
license: (ISC)
|
||||||
|
```
|
||||||
|
|
||||||
فكر في `package.json` باعتباره حارس جميع التبعيات أو مظاهر مشروع Node.js. إذا كنت تريد طريقة أسرع لإنشاء ملف package.json استخدم `npm init --y` .
|
فكر في `package.json` باعتباره حارس جميع التبعيات أو مظاهر مشروع Node.js. إذا كنت تريد طريقة أسرع لإنشاء ملف package.json استخدم `npm init --y` .
|
||||||
|
|
||||||
@ -162,146 +173,157 @@ npm هو مدير حزم لذا يجب أن يكون قادرًا على إزا
|
|||||||
|
|
||||||
مثال:
|
مثال:
|
||||||
|
|
||||||
`{
|
```json
|
||||||
"name": "express",
|
{
|
||||||
"description": "Fast, unopinionated, minimalist web framework",
|
"name": "express",
|
||||||
"version": "4.11.2",
|
"description": "Fast, unopinionated, minimalist web framework",
|
||||||
"author": {
|
"version": "4.11.2",
|
||||||
|
"author": {
|
||||||
"name": "TJ Holowaychuk",
|
|
||||||
"email": "tj@vision-media.ca"
|
"name": "TJ Holowaychuk",
|
||||||
},
|
"email": "tj@vision-media.ca"
|
||||||
|
},
|
||||||
"contributors": [{
|
|
||||||
"name": "Aaron Heckmann",
|
"contributors": [{
|
||||||
"email": "aaron.heckmann+github@gmail.com"
|
"name": "Aaron Heckmann",
|
||||||
},
|
"email": "aaron.heckmann+github@gmail.com"
|
||||||
|
},
|
||||||
],
|
|
||||||
"license": "MIT", "repository": {
|
],
|
||||||
"type": "git",
|
"license": "MIT", "repository": {
|
||||||
"url": "https://github.com/strongloop/express"
|
"type": "git",
|
||||||
},
|
"url": "https://github.com/strongloop/express"
|
||||||
"homepage": "https://expressjs.com/", "keywords": [
|
},
|
||||||
"express",
|
"homepage": "https://expressjs.com/", "keywords": [
|
||||||
"framework",
|
"express",
|
||||||
"sinatra",
|
"framework",
|
||||||
"web",
|
"sinatra",
|
||||||
"rest",
|
"web",
|
||||||
"restful",
|
"rest",
|
||||||
"router",
|
"restful",
|
||||||
"app",
|
"router",
|
||||||
"api"
|
"app",
|
||||||
],
|
"api"
|
||||||
"dependencies": {
|
],
|
||||||
"serve-static": "~1.8.1",
|
"dependencies": {
|
||||||
|
"serve-static": "~1.8.1",
|
||||||
},
|
|
||||||
"devDependencies": {
|
},
|
||||||
"jade": "~1.9.1",
|
"devDependencies": {
|
||||||
},
|
"jade": "~1.9.1",
|
||||||
"engines": {
|
},
|
||||||
"node": ">= 0.10.0"
|
"engines": {
|
||||||
},
|
"node": ">= 0.10.0"
|
||||||
"files": [
|
},
|
||||||
"LICENSE",
|
"files": [
|
||||||
"History.md",
|
"LICENSE",
|
||||||
"Readme.md",
|
"History.md",
|
||||||
"index.js",
|
"Readme.md",
|
||||||
"lib/"
|
"index.js",
|
||||||
],
|
"lib/"
|
||||||
"scripts": {
|
],
|
||||||
"test": "mocha --require test/support/env
|
"scripts": {
|
||||||
--reporter spec --bail --check-leaks test/ test/acceptance/",
|
"test": "mocha --require test/support/env
|
||||||
"test-cov": "istanbul cover node_modules/mocha/bin/_mocha
|
--reporter spec --bail --check-leaks test/ test/acceptance/",
|
||||||
-- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/",
|
"test-cov": "istanbul cover node_modules/mocha/bin/_mocha
|
||||||
"test-tap": "mocha --require test/support/env
|
-- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/",
|
||||||
--reporter tap --check-leaks test/ test/acceptance/",
|
"test-tap": "mocha --require test/support/env
|
||||||
"test-travis": "istanbul cover node_modules/mocha/bin/_mocha
|
--reporter tap --check-leaks test/ test/acceptance/",
|
||||||
--report lcovonly -- --require test/support/env
|
"test-travis": "istanbul cover node_modules/mocha/bin/_mocha
|
||||||
--reporter spec --check-leaks test/ test/acceptance/"
|
--report lcovonly -- --require test/support/env
|
||||||
},
|
--reporter spec --check-leaks test/ test/acceptance/"
|
||||||
|
},
|
||||||
}
|
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## مخطوطات npm
|
## مخطوطات npm
|
||||||
|
|
||||||
`npm` البرامج النصية `npm` لأتمتة المهام المتكررة. على سبيل المثال ، بناء مشروعك ، وتقليل ملفات Cascading Style Sheets (CSS) و JavaScript (JS). تُستخدم البرامج النصية أيضًا في حذف الملفات والمجلدات المؤقتة ، إلخ. يمكن تخصيصها ويمكن الوصول إليها عبر كائن `scripts` في `package.json` .
|
`npm` البرامج النصية `npm` لأتمتة المهام المتكررة. على سبيل المثال ، بناء مشروعك ، وتقليل ملفات Cascading Style Sheets (CSS) و JavaScript (JS). تُستخدم البرامج النصية أيضًا في حذف الملفات والمجلدات المؤقتة ، إلخ. يمكن تخصيصها ويمكن الوصول إليها عبر كائن `scripts` في `package.json` .
|
||||||
|
|
||||||
`{
|
```json
|
||||||
"name": "super-cool-package",
|
{
|
||||||
"version": "1.0.0",
|
"name": "super-cool-package",
|
||||||
"scripts": {}
|
"version": "1.0.0",
|
||||||
}
|
"scripts": {}
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
مثال على أكثر نصوص NPM شيوعًا:
|
مثال على أكثر نصوص NPM شيوعًا:
|
||||||
|
|
||||||
`"scripts": {
|
```json
|
||||||
"start": "node index.js",
|
"scripts": {
|
||||||
...
|
"start": "node index.js",
|
||||||
}
|
...
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## npm الكاش
|
## npm الكاش
|
||||||
|
|
||||||
عندما تقوم npm بتثبيت حزمة فإنها تحتفظ بنسخة ، لذلك في المرة التالية التي ترغب في تثبيت هذه الحزمة ، لا تحتاج إلى الوصول إلى الشبكة. يتم تخزين النسخ مؤقتًا في الدليل .npm في المسار الرئيسي.
|
عندما تقوم npm بتثبيت حزمة فإنها تحتفظ بنسخة ، لذلك في المرة التالية التي ترغب في تثبيت هذه الحزمة ، لا تحتاج إلى الوصول إلى الشبكة. يتم تخزين النسخ مؤقتًا في الدليل .npm في المسار الرئيسي.
|
||||||
|
|
||||||
`$ ls ~/.npm
|
```shell
|
||||||
lodash.zipobject
|
$ ls ~/.npm
|
||||||
log-driver
|
lodash.zipobject
|
||||||
log-symbols
|
log-driver
|
||||||
logalot
|
log-symbols
|
||||||
logfmt
|
logalot
|
||||||
loglevel
|
logfmt
|
||||||
long-timeout
|
loglevel
|
||||||
longest
|
long-timeout
|
||||||
longest-strea
|
longest
|
||||||
`
|
longest-strea
|
||||||
|
```
|
||||||
|
|
||||||
سيصبح هذا الدليل مزدحمًا مع الحزم القديمة بمرور الوقت ، لذلك من المفيد تنظيفه في بعض الأحيان.
|
سيصبح هذا الدليل مزدحمًا مع الحزم القديمة بمرور الوقت ، لذلك من المفيد تنظيفه في بعض الأحيان.
|
||||||
|
|
||||||
`$ npm cache clean
|
```shell
|
||||||
`
|
$ npm cache clean
|
||||||
|
```
|
||||||
|
|
||||||
## غزل - بديل ل npm
|
## غزل - بديل ل npm
|
||||||
|
|
||||||
غزل هو أيضا مدير حزمة جافا سكريبت المتقدمة والمحافظة عليها من قبل الفيسبوك. كلاهما يشتركان في أوجه تشابه عالية عندما يتعلق الأمر باستخدامهما. من المفترض أن يكون أسرع في تثبيت التبعيات من npm. لتثبيته:
|
غزل هو أيضا مدير حزمة جافا سكريبت المتقدمة والمحافظة عليها من قبل الفيسبوك. كلاهما يشتركان في أوجه تشابه عالية عندما يتعلق الأمر باستخدامهما. من المفترض أن يكون أسرع في تثبيت التبعيات من npm. لتثبيته:
|
||||||
|
|
||||||
`npm install -g yarn
|
```shell
|
||||||
`
|
npm install -g yarn
|
||||||
|
```
|
||||||
|
|
||||||
لا ينوي غزل استبدال npm ، أكثر مثل تحسين عليه. ويستخدم نفس ملف package.json ، ويحفظ التبعيات إلى `node_modules/` folder. لتهيئة مشروع ، سوف تستخدم:
|
لا ينوي غزل استبدال npm ، أكثر مثل تحسين عليه. ويستخدم نفس ملف package.json ، ويحفظ التبعيات إلى `node_modules/` folder. لتهيئة مشروع ، سوف تستخدم:
|
||||||
|
|
||||||
`yarn init
|
```shell
|
||||||
`
|
yarn init
|
||||||
|
```
|
||||||
|
|
||||||
### إضافة ، وترقية ، وإزالة التبعيات
|
### إضافة ، وترقية ، وإزالة التبعيات
|
||||||
|
|
||||||
إضافة تبعية جديدة أمر سهل ومماثل إلى npm:
|
إضافة تبعية جديدة أمر سهل ومماثل إلى npm:
|
||||||
|
|
||||||
`yarn add [package-name]
|
```shell
|
||||||
`
|
yarn add [package-name]
|
||||||
|
```
|
||||||
|
|
||||||
إذا كنت تريد إصدارًا أو علامة حزمة معينة ، فيمكنك القيام بذلك.
|
إذا كنت تريد إصدارًا أو علامة حزمة معينة ، فيمكنك القيام بذلك.
|
||||||
|
|
||||||
`yarn add express@4.14.1
|
```shell
|
||||||
`
|
yarn add express@4.14.1
|
||||||
|
```
|
||||||
|
|
||||||
بالنسبة إلى تبعيات dev ، تبعية الأقران والتبعيات الاختيارية التي تمر بها --dev --peer --optional على التوالي.
|
بالنسبة إلى تبعيات dev ، تبعية الأقران والتبعيات الاختيارية التي تمر بها --dev --peer --optional على التوالي.
|
||||||
|
|
||||||
`yarn add gulp --dev
|
```shell
|
||||||
`
|
yarn add gulp --dev
|
||||||
|
```
|
||||||
|
|
||||||
سيوفر الجولب تحت devDependencies. لترقية حزمة أو إزالتها ، يمكنك فقط استبدال أمر الإضافة إما بترقية أو إزالة متبوعة باسم الحزمة.
|
سيوفر الجولب تحت devDependencies. لترقية حزمة أو إزالتها ، يمكنك فقط استبدال أمر الإضافة إما بترقية أو إزالة متبوعة باسم الحزمة.
|
||||||
|
|
||||||
`# upgrade a gulp from 3.9.1 to version 4
|
```shell
|
||||||
yarn upgrade gulp@4.0
|
# upgrade a gulp from 3.9.1 to version 4
|
||||||
|
yarn upgrade gulp@4.0
|
||||||
# remove a gulp
|
|
||||||
yarn remove gulp
|
# remove a gulp
|
||||||
`
|
yarn remove gulp
|
||||||
|
```
|
||||||
|
|
||||||
بعد كل عملية تثبيت أو ترقية أو إزالة ، يقوم الغزل بتحديث ملف yarn.lock الذي يتتبع إصدار الحزمة المضبوط المثبت في دليل node\_modules. تم تحديث ميزة مشابهة في npm. الآن هناك `package-lock.json` التي تتصرف بالضبط بنفس الطريقة كما `yarn.lock` في إصدارات أحدث من npm.
|
بعد كل عملية تثبيت أو ترقية أو إزالة ، يقوم الغزل بتحديث ملف yarn.lock الذي يتتبع إصدار الحزمة المضبوط المثبت في دليل node\_modules. تم تحديث ميزة مشابهة في npm. الآن هناك `package-lock.json` التي تتصرف بالضبط بنفس الطريقة كما `yarn.lock` في إصدارات أحدث من npm.
|
||||||
|
|
||||||
|
@ -6,35 +6,37 @@ localeTitle: كائن العملية
|
|||||||
|
|
||||||
يعد كائن `process` في Node.js كائنًا عموميًا يمكن الوصول إليه داخل أية وحدة نمطية دون الحاجة إلى ذلك. هناك عدد قليل جدًا من الكائنات أو الخصائص العامة المتوفرة في Node.js ، وتكون `process` واحدة منها. وهو مكون أساسي في النظام البيئي Node.js لأنه يوفر مجموعات المعلومات المختلفة حول وقت تشغيل البرنامج. لاستكشاف سوف نستخدم واحدة من خصائصه والتي تسمى `process.versions` . تخبرنا هذه الخاصية بالمعلومات حول إصدار Node.js الذي قمنا بتثبيته. يجب استخدامه مع `-p` flag.
|
يعد كائن `process` في Node.js كائنًا عموميًا يمكن الوصول إليه داخل أية وحدة نمطية دون الحاجة إلى ذلك. هناك عدد قليل جدًا من الكائنات أو الخصائص العامة المتوفرة في Node.js ، وتكون `process` واحدة منها. وهو مكون أساسي في النظام البيئي Node.js لأنه يوفر مجموعات المعلومات المختلفة حول وقت تشغيل البرنامج. لاستكشاف سوف نستخدم واحدة من خصائصه والتي تسمى `process.versions` . تخبرنا هذه الخاصية بالمعلومات حول إصدار Node.js الذي قمنا بتثبيته. يجب استخدامه مع `-p` flag.
|
||||||
|
|
||||||
`$ node -p "process.versions"
|
```shell
|
||||||
|
$ node -p "process.versions"
|
||||||
# output
|
|
||||||
{ http_parser: '2.8.0',
|
# output
|
||||||
node: '8.11.2',
|
{ http_parser: '2.8.0',
|
||||||
v8: '6.2.414.54',
|
node: '8.11.2',
|
||||||
uv: '1.19.1',
|
v8: '6.2.414.54',
|
||||||
zlib: '1.2.11',
|
uv: '1.19.1',
|
||||||
ares: '1.10.1-DEV',
|
zlib: '1.2.11',
|
||||||
modules: '57',
|
ares: '1.10.1-DEV',
|
||||||
nghttp2: '1.29.0',
|
modules: '57',
|
||||||
napi: '3',
|
nghttp2: '1.29.0',
|
||||||
openssl: '1.0.2o',
|
napi: '3',
|
||||||
icu: '60.1',
|
openssl: '1.0.2o',
|
||||||
unicode: '10.0',
|
icu: '60.1',
|
||||||
cldr: '32.0',
|
unicode: '10.0',
|
||||||
tz: '2017c' }
|
cldr: '32.0',
|
||||||
`
|
tz: '2017c' }
|
||||||
|
```
|
||||||
|
|
||||||
خاصية أخرى يمكنك التحقق منها هي `process.release` التي هي نفسها للأمر `$ node --version` التي استخدمناها عندما قمنا بتثبيت Node.js لكن الإخراج هذه المرة سيكون أكثر تفصيلاً.
|
خاصية أخرى يمكنك التحقق منها هي `process.release` التي هي نفسها للأمر `$ node --version` التي استخدمناها عندما قمنا بتثبيت Node.js لكن الإخراج هذه المرة سيكون أكثر تفصيلاً.
|
||||||
|
|
||||||
`node -p "process.release"
|
```shell
|
||||||
|
node -p "process.release"
|
||||||
# output
|
|
||||||
{ name: 'node',
|
# output
|
||||||
lts: 'Carbon',
|
{ name: 'node',
|
||||||
sourceUrl: 'https://nodejs.org/download/release/v8.11.2/node-v8.11.2.tar.gz',
|
lts: 'Carbon',
|
||||||
headersUrl: 'https://nodejs.org/download/release/v8.11.2/node-v8.11.2-headers.tar.gz' }
|
sourceUrl: 'https://nodejs.org/download/release/v8.11.2/node-v8.11.2.tar.gz',
|
||||||
`
|
headersUrl: 'https://nodejs.org/download/release/v8.11.2/node-v8.11.2-headers.tar.gz' }
|
||||||
|
```
|
||||||
|
|
||||||
هذه بعض الأوامر المختلفة التي يمكننا استخدامها في سطر الأوامر للوصول إلى المعلومات التي لا يمكن لأي وحدة توفيرها. يعتبر كائن `process` هذا مثالًا لفئة EventEmitter ولا يحتوي على أحداثه المحددة مسبقًا مثل `exit` والتي يمكن استخدامها لمعرفة متى أكمل أحد البرامج في Node.js تنفيذه. تشغيل البرنامج أدناه ويمكنك ملاحظة أن النتيجة تأتي مع رمز الحالة `0` . في Node.js يعني رمز الحالة هذا أن أحد البرامج قد تم تشغيله بنجاح.
|
هذه بعض الأوامر المختلفة التي يمكننا استخدامها في سطر الأوامر للوصول إلى المعلومات التي لا يمكن لأي وحدة توفيرها. يعتبر كائن `process` هذا مثالًا لفئة EventEmitter ولا يحتوي على أحداثه المحددة مسبقًا مثل `exit` والتي يمكن استخدامها لمعرفة متى أكمل أحد البرامج في Node.js تنفيذه. تشغيل البرنامج أدناه ويمكنك ملاحظة أن النتيجة تأتي مع رمز الحالة `0` . في Node.js يعني رمز الحالة هذا أن أحد البرامج قد تم تشغيله بنجاح.
|
||||||
|
|
||||||
@ -50,9 +52,10 @@ localeTitle: كائن العملية
|
|||||||
|
|
||||||
ناتج البرنامج أعلاه:
|
ناتج البرنامج أعلاه:
|
||||||
|
|
||||||
`Execution Completed
|
```shell
|
||||||
Exited with status code: 0
|
Execution Completed
|
||||||
`
|
Exited with status code: 0
|
||||||
|
```
|
||||||
|
|
||||||
`Process` توفر أيضا خصائص مختلفة للتفاعل معها. يمكن استخدام بعضها في تطبيق عقدة لتوفير بوابة للتواصل بين تطبيق العقدة وأي واجهة سطر الأوامر. هذا مفيد جدا إذا كنت تقوم ببناء تطبيق سطر الأوامر أو أداة مساعدة باستخدام Node.js
|
`Process` توفر أيضا خصائص مختلفة للتفاعل معها. يمكن استخدام بعضها في تطبيق عقدة لتوفير بوابة للتواصل بين تطبيق العقدة وأي واجهة سطر الأوامر. هذا مفيد جدا إذا كنت تقوم ببناء تطبيق سطر الأوامر أو أداة مساعدة باستخدام Node.js
|
||||||
|
|
||||||
@ -73,10 +76,11 @@ localeTitle: كائن العملية
|
|||||||
|
|
||||||
إذا قمت بتشغيل التعليمات البرمجية المذكورة أعلاه باستخدام الأمر التالي ستحصل على الإخراج ويتم طباعة العناصر الأولين من `argv` .
|
إذا قمت بتشغيل التعليمات البرمجية المذكورة أعلاه باستخدام الأمر التالي ستحصل على الإخراج ويتم طباعة العناصر الأولين من `argv` .
|
||||||
|
|
||||||
`$ node test.js
|
```shell
|
||||||
|
$ node test.js
|
||||||
# output
|
|
||||||
Hello World!
|
# output
|
||||||
0: /usr/local/bin/node
|
Hello World!
|
||||||
1: /Users/amanhimself/Desktop/articles/nodejs-text-tuts/test.js
|
0: /usr/local/bin/node
|
||||||
`
|
1: /Users/amanhimself/Desktop/articles/nodejs-text-tuts/test.js
|
||||||
|
```
|
@ -25,18 +25,20 @@ localeTitle: تيارات
|
|||||||
|
|
||||||
في Node.js ، يتم استخدام `pipe` بنفس الطريقة ، لربط المدخلات والمخرجات من العمليات المختلفة. يتوفر `pipe()` كدالة تأخذ تيار مصدر مقروء وتربط الإخراج إلى تيار وجهة. يمكن تمثيل الصيغة العامة على النحو التالي:
|
في Node.js ، يتم استخدام `pipe` بنفس الطريقة ، لربط المدخلات والمخرجات من العمليات المختلفة. يتوفر `pipe()` كدالة تأخذ تيار مصدر مقروء وتربط الإخراج إلى تيار وجهة. يمكن تمثيل الصيغة العامة على النحو التالي:
|
||||||
|
|
||||||
`src.pipe(dest);
|
```javascript
|
||||||
`
|
src.pipe(dest);
|
||||||
|
```
|
||||||
|
|
||||||
يمكن أيضاً ربط الدالات متعددة `pipe()` معاً.
|
يمكن أيضاً ربط الدالات متعددة `pipe()` معاً.
|
||||||
|
|
||||||
`a.pipe(b).pipe(c);
|
```javascript
|
||||||
|
a.pipe(b).pipe(c);
|
||||||
// which is equivalent to
|
|
||||||
|
// which is equivalent to
|
||||||
a.pipe(b);
|
|
||||||
b.pipe(c);
|
a.pipe(b);
|
||||||
`
|
b.pipe(c);
|
||||||
|
```
|
||||||
|
|
||||||
### تيارات مقروءة
|
### تيارات مقروءة
|
||||||
|
|
||||||
@ -62,40 +64,42 @@ localeTitle: تيارات
|
|||||||
* الترميز: لتحويل البيانات إلى نموذج قابل للقراءة من قبل الإنسان
|
* الترميز: لتحويل البيانات إلى نموذج قابل للقراءة من قبل الإنسان
|
||||||
* رد الاتصال: دالة يتم استدعاؤها عند الانتهاء من معالجة البيانات من القطعة
|
* رد الاتصال: دالة يتم استدعاؤها عند الانتهاء من معالجة البيانات من القطعة
|
||||||
|
|
||||||
`const { Writable } = require('stream');
|
```javascript
|
||||||
const writable = new Writable({
|
const { Writable } = require('stream');
|
||||||
write(chunk, encoding, callback) {
|
const writable = new Writable({
|
||||||
console.log(chunk.toString());
|
write(chunk, encoding, callback) {
|
||||||
callback();
|
console.log(chunk.toString());
|
||||||
}
|
callback();
|
||||||
});
|
}
|
||||||
|
});
|
||||||
process.stdin.pipe(writable);
|
|
||||||
`
|
process.stdin.pipe(writable);
|
||||||
|
```
|
||||||
|
|
||||||
### تيارات دوبلكس
|
### تيارات دوبلكس
|
||||||
|
|
||||||
تيارات البث المزدوجة تساعدنا على تنفيذ كل من الدفق القابل للقراءة والكتابة في نفس الوقت.
|
تيارات البث المزدوجة تساعدنا على تنفيذ كل من الدفق القابل للقراءة والكتابة في نفس الوقت.
|
||||||
|
|
||||||
`const { Duplex } = require('stream');
|
```javascript
|
||||||
|
const { Duplex } = require('stream');
|
||||||
const inoutStream = new Duplex({
|
|
||||||
write(chunk, encoding, callback) {
|
const inoutStream = new Duplex({
|
||||||
console.log(chunk.toString());
|
write(chunk, encoding, callback) {
|
||||||
callback();
|
console.log(chunk.toString());
|
||||||
},
|
callback();
|
||||||
|
},
|
||||||
read(size) {
|
|
||||||
this.push(String.fromCharCode(this.currentCharCode++));
|
read(size) {
|
||||||
if (this.currentCharCode > 90) {
|
this.push(String.fromCharCode(this.currentCharCode++));
|
||||||
this.push(null);
|
if (this.currentCharCode > 90) {
|
||||||
}
|
this.push(null);
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
});
|
||||||
inoutStream.currentCharCode = 65;
|
|
||||||
process.stdin.pipe(inoutStream).pipe(process.stdout);
|
inoutStream.currentCharCode = 65;
|
||||||
`
|
process.stdin.pipe(inoutStream).pipe(process.stdout);
|
||||||
|
```
|
||||||
|
|
||||||
`stdin` قطار `stdin` البيانات القابلة للقراءة إلى الدفق المزدوج. يساعدنا `stdout` على رؤية البيانات. تعمل الأجزاء القابلة للقراءة والكتابة في الدفق المزدوج بشكل مستقل تمامًا عن بعضها البعض.
|
`stdin` قطار `stdin` البيانات القابلة للقراءة إلى الدفق المزدوج. يساعدنا `stdout` على رؤية البيانات. تعمل الأجزاء القابلة للقراءة والكتابة في الدفق المزدوج بشكل مستقل تمامًا عن بعضها البعض.
|
||||||
|
|
||||||
@ -103,17 +107,18 @@ localeTitle: تيارات
|
|||||||
|
|
||||||
هذا النوع من الدفق هو أكثر من إصدار متقدم من الدفق المزدوج.
|
هذا النوع من الدفق هو أكثر من إصدار متقدم من الدفق المزدوج.
|
||||||
|
|
||||||
`const { Transform } = require('stream');
|
```javascript
|
||||||
|
const { Transform } = require('stream');
|
||||||
const upperCaseTr = new Transform({
|
|
||||||
transform(chunk, encoding, callback) {
|
const upperCaseTr = new Transform({
|
||||||
this.push(chunk.toString().toUpperCase());
|
transform(chunk, encoding, callback) {
|
||||||
callback();
|
this.push(chunk.toString().toUpperCase());
|
||||||
}
|
callback();
|
||||||
});
|
}
|
||||||
|
});
|
||||||
process.stdin.pipe(upperCaseTr).pipe(process.stdout);
|
|
||||||
`
|
process.stdin.pipe(upperCaseTr).pipe(process.stdout);
|
||||||
|
```
|
||||||
|
|
||||||
البيانات التي نستهلكها هي نفس المثال السابق للدفق المزدوج. إن ما نلاحظه هنا هو أن `transform()` لا يتطلب تنفيذ أساليب `read` أو `write` . يجمع بين كل من الأساليب نفسها.
|
البيانات التي نستهلكها هي نفس المثال السابق للدفق المزدوج. إن ما نلاحظه هنا هو أن `transform()` لا يتطلب تنفيذ أساليب `read` أو `write` . يجمع بين كل من الأساليب نفسها.
|
||||||
|
|
||||||
@ -121,30 +126,32 @@ localeTitle: تيارات
|
|||||||
|
|
||||||
نظرًا لأن Node.js غير متزامن بحيث يتفاعل من خلال تمرير الاسترجاعات إلى وظائف مع القرص والشبكة. يقرأ المثال الموجود أدناه البيانات من ملف على القرص ويستجيب إلى طلب الشبكة من العميل.
|
نظرًا لأن Node.js غير متزامن بحيث يتفاعل من خلال تمرير الاسترجاعات إلى وظائف مع القرص والشبكة. يقرأ المثال الموجود أدناه البيانات من ملف على القرص ويستجيب إلى طلب الشبكة من العميل.
|
||||||
|
|
||||||
`const http = require('http');
|
```javascript
|
||||||
const fs = require('fs');
|
const http = require('http');
|
||||||
|
const fs = require('fs');
|
||||||
const server = http.createServer((req, res) => {
|
|
||||||
fs.readFile('data.txt', (err, data) => {
|
const server = http.createServer((req, res) => {
|
||||||
res.end(data);
|
fs.readFile('data.txt', (err, data) => {
|
||||||
});
|
res.end(data);
|
||||||
});
|
});
|
||||||
server.listen(8000);
|
});
|
||||||
`
|
server.listen(8000);
|
||||||
|
```
|
||||||
|
|
||||||
سيعمل مقتطف الشفرة الموضح أعلاه ولكن البيانات الكاملة من الملف ستدخل أولاً إلى الذاكرة لكل طلب قبل كتابة النتيجة مرة أخرى لطلب العميل. إذا كان الملف الذي نقرأه كبيرًا جدًا ، فقد يصبح هذا اتصالًا للخادم ثقيلًا ومكلفًا للغاية ، حيث سيستهلك الكثير من الذاكرة لعملية التقدم. ستعاني أيضًا تجربة المستخدم على جانب العميل من التأخير.
|
سيعمل مقتطف الشفرة الموضح أعلاه ولكن البيانات الكاملة من الملف ستدخل أولاً إلى الذاكرة لكل طلب قبل كتابة النتيجة مرة أخرى لطلب العميل. إذا كان الملف الذي نقرأه كبيرًا جدًا ، فقد يصبح هذا اتصالًا للخادم ثقيلًا ومكلفًا للغاية ، حيث سيستهلك الكثير من الذاكرة لعملية التقدم. ستعاني أيضًا تجربة المستخدم على جانب العميل من التأخير.
|
||||||
|
|
||||||
في هذه الحالة ، إذا استخدمنا الدفق ، سيتم إرسال البيانات إلى طلب العميل كقطعة واحدة في كل مرة بمجرد تلقيها من القرص.
|
في هذه الحالة ، إذا استخدمنا الدفق ، سيتم إرسال البيانات إلى طلب العميل كقطعة واحدة في كل مرة بمجرد تلقيها من القرص.
|
||||||
|
|
||||||
`const http = require('http');
|
```javascript
|
||||||
const fs = require('fs');
|
const http = require('http');
|
||||||
|
const fs = require('fs');
|
||||||
const server = http.createServer((req, res) => {
|
|
||||||
const stream = fs.createReadStream('data.txt');
|
const server = http.createServer((req, res) => {
|
||||||
stream.pipe(res);
|
const stream = fs.createReadStream('data.txt');
|
||||||
});
|
stream.pipe(res);
|
||||||
server.listen(8000);
|
});
|
||||||
`
|
server.listen(8000);
|
||||||
|
```
|
||||||
|
|
||||||
يعتني `pipe()` هنا بالكتابة أو في حالتنا ، وإرسال البيانات مع كائن الاستجابة وبمجرد قراءة كل البيانات من الملف ، لإغلاق الاتصال.
|
يعتني `pipe()` هنا بالكتابة أو في حالتنا ، وإرسال البيانات مع كائن الاستجابة وبمجرد قراءة كل البيانات من الملف ، لإغلاق الاتصال.
|
||||||
|
|
||||||
|
@ -27,8 +27,9 @@ localeTitle: AJAX
|
|||||||
|
|
||||||
**إنشاء كائن XMLHttpRequest:**
|
**إنشاء كائن XMLHttpRequest:**
|
||||||
|
|
||||||
`var xhttp = new XMLHttpRequest();
|
```javascript
|
||||||
`
|
var xhttp = new XMLHttpRequest();
|
||||||
|
```
|
||||||
|
|
||||||
**خصائص كائن XMLHttpRequest:**
|
**خصائص كائن XMLHttpRequest:**
|
||||||
|
|
||||||
@ -50,52 +51,55 @@ localeTitle: AJAX
|
|||||||
|
|
||||||
**أساليب كائن XMLHttpRequest:** لإرسال طلب إلى خادم ويب ، نستخدم الأساليب open () و send () للكائن XMLHttpRequest.
|
**أساليب كائن XMLHttpRequest:** لإرسال طلب إلى خادم ويب ، نستخدم الأساليب open () و send () للكائن XMLHttpRequest.
|
||||||
|
|
||||||
`xhttp.open("GET", "content.txt", true);
|
```javascript
|
||||||
xhttp.send();
|
xhttp.open("GET", "content.txt", true);
|
||||||
`
|
xhttp.send();
|
||||||
|
```
|
||||||
|
|
||||||
**إنشاء تغيير وظيفةContent () باستخدام JavaScript:**
|
**إنشاء تغيير وظيفةContent () باستخدام JavaScript:**
|
||||||
|
|
||||||
`function changeContent() {
|
```javascript
|
||||||
var xhttp = new XMLHttpRequest();
|
function changeContent() {
|
||||||
xhttp.onreadystatechange = function() {
|
var xhttp = new XMLHttpRequest();
|
||||||
if (this.readyState == 4 && this.status == 200) {
|
xhttp.onreadystatechange = function() {
|
||||||
document.getElementById("foo").innerHTML = this.responseText;
|
if (this.readyState == 4 && this.status == 200) {
|
||||||
}
|
document.getElementById("foo").innerHTML = this.responseText;
|
||||||
};
|
}
|
||||||
xhttp.open("GET", "content.txt", true);
|
};
|
||||||
xhttp.send();
|
xhttp.open("GET", "content.txt", true);
|
||||||
}
|
xhttp.send();
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
**مثال AJAX لتغيير محتوى صفحة الويب:**
|
**مثال AJAX لتغيير محتوى صفحة الويب:**
|
||||||
|
|
||||||
`<!DOCTYPE html>
|
```HTML
|
||||||
<html>
|
<!DOCTYPE html>
|
||||||
<body>
|
<html>
|
||||||
|
<body>
|
||||||
<div id="foo">
|
|
||||||
<h2>The XMLHttpRequest Object</h2>
|
<div id="foo">
|
||||||
<button type="button" onclick="changeContent()">Change Content</button>
|
<h2>The XMLHttpRequest Object</h2>
|
||||||
</div>
|
<button type="button" onclick="changeContent()">Change Content</button>
|
||||||
|
</div>
|
||||||
<script>
|
|
||||||
function changeContent() {
|
<script>
|
||||||
var xhttp = new XMLHttpRequest();
|
function changeContent() {
|
||||||
xhttp.onreadystatechange = function() {
|
var xhttp = new XMLHttpRequest();
|
||||||
if (this.readyState == 4 && this.status == 200) {
|
xhttp.onreadystatechange = function() {
|
||||||
document.getElementById("foo").innerHTML =
|
if (this.readyState == 4 && this.status == 200) {
|
||||||
this.responseText;
|
document.getElementById("foo").innerHTML =
|
||||||
}
|
this.responseText;
|
||||||
};
|
}
|
||||||
xhttp.open("GET", "content.txt", true);
|
};
|
||||||
xhttp.send();
|
xhttp.open("GET", "content.txt", true);
|
||||||
}
|
xhttp.send();
|
||||||
</script>
|
}
|
||||||
|
</script>
|
||||||
</body>
|
|
||||||
</html>
|
</body>
|
||||||
`
|
</html>
|
||||||
|
```
|
||||||
|
|
||||||
يجب أن يكون الملف `content.txt` موجودًا في الدليل الجذر لتطبيق الويب.
|
يجب أن يكون الملف `content.txt` موجودًا في الدليل الجذر لتطبيق الويب.
|
||||||
|
|
||||||
|
@ -8,12 +8,13 @@ localeTitle: مجموعة مصفوفة
|
|||||||
|
|
||||||
هنا مثال:
|
هنا مثال:
|
||||||
|
|
||||||
`<?php
|
```
|
||||||
// array without keys
|
<?php
|
||||||
$bikes = array("Suzuki","BMW","Yamaha");
|
// array without keys
|
||||||
echo "I like " . $bikes[0] . ", " . $bikes[1] . " and " . $bikes[2] . ".";
|
$bikes = array("Suzuki","BMW","Yamaha");
|
||||||
?>
|
echo "I like " . $bikes[0] . ", " . $bikes[1] . " and " . $bikes[2] . ".";
|
||||||
`
|
?>
|
||||||
|
```
|
||||||
|
|
||||||
مجموعة PHP لديها العديد من الوظائف للعمل بها. هنا هو كل قائمة تم فرزها: [وظائف](https://www.w3schools.com/php/php_ref_array.asp)
|
مجموعة PHP لديها العديد من الوظائف للعمل بها. هنا هو كل قائمة تم فرزها: [وظائف](https://www.w3schools.com/php/php_ref_array.asp)
|
||||||
|
|
||||||
@ -23,13 +24,14 @@ localeTitle: مجموعة مصفوفة
|
|||||||
|
|
||||||
هذا مثال بسيط:
|
هذا مثال بسيط:
|
||||||
|
|
||||||
`<?php
|
```
|
||||||
$array = array(
|
<?php
|
||||||
"foo" => "bar",
|
$array = array(
|
||||||
"bar" => "foo",
|
"foo" => "bar",
|
||||||
);
|
"bar" => "foo",
|
||||||
|
);
|
||||||
echo $array['bar'];
|
|
||||||
`
|
echo $array['bar'];
|
||||||
|
```
|
||||||
|
|
||||||
أتمنى لك يومًا سعيدًا وترميزًا سعيدًا !!!
|
أتمنى لك يومًا سعيدًا وترميزًا سعيدًا !!!
|
@ -12,9 +12,10 @@ localeTitle: المصفوفات
|
|||||||
|
|
||||||
صفيف مفهرسة يصل إلى الكائنات حسب رقم الفهرس.
|
صفيف مفهرسة يصل إلى الكائنات حسب رقم الفهرس.
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
$freecodecamp = array("free", "code", "camp");
|
<?php
|
||||||
`
|
$freecodecamp = array("free", "code", "camp");
|
||||||
|
```
|
||||||
|
|
||||||
`$freecodecamp[0]` سيعود `"free"` ، `$freecodecamp[1]` سيعود `"code"` ، و `$freecodecamp[2]` سيعود `"camp"` .
|
`$freecodecamp[0]` سيعود `"free"` ، `$freecodecamp[1]` سيعود `"code"` ، و `$freecodecamp[2]` سيعود `"camp"` .
|
||||||
|
|
||||||
@ -22,9 +23,10 @@ localeTitle: المصفوفات
|
|||||||
|
|
||||||
صفيف جمعية يصل إلى الكائنات عن طريق اسم المفتاح.
|
صفيف جمعية يصل إلى الكائنات عن طريق اسم المفتاح.
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
$freecodecamp = array("free"=>"0","code"=>"1","camp"=>"2");
|
<?php
|
||||||
`
|
$freecodecamp = array("free"=>"0","code"=>"1","camp"=>"2");
|
||||||
|
```
|
||||||
|
|
||||||
`$freecodecamp['free']` سيعود "0" ، `$freecodecamp['code']` سيعود "1" ، `$freecodecamp['camp']` سيعود "2" ،
|
`$freecodecamp['free']` سيعود "0" ، `$freecodecamp['code']` سيعود "1" ، `$freecodecamp['camp']` سيعود "2" ،
|
||||||
|
|
||||||
@ -32,9 +34,10 @@ localeTitle: المصفوفات
|
|||||||
|
|
||||||
المصفوفة متعددة الأبعاد هي مصفوفة تحتوي على صفائف أخرى.
|
المصفوفة متعددة الأبعاد هي مصفوفة تحتوي على صفائف أخرى.
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
$freecodecamp = array(array("free"=>"0","code"=>"1","camp"=>"2"),array("free"=>"0","code"=>"1","camp"=>"2"),array("free"=>"0","code"=>"1","camp"=>"2"));
|
<?php
|
||||||
`
|
$freecodecamp = array(array("free"=>"0","code"=>"1","camp"=>"2"),array("free"=>"0","code"=>"1","camp"=>"2"),array("free"=>"0","code"=>"1","camp"=>"2"));
|
||||||
|
```
|
||||||
|
|
||||||
#### معلومات اكثر:
|
#### معلومات اكثر:
|
||||||
|
|
||||||
|
@ -10,121 +10,133 @@ localeTitle: فرز المصفوفات
|
|||||||
|
|
||||||
تقوم الدالة `sort()` بفرز قيم صفيف بترتيب أبجدي / رقمي تصاعدي (على سبيل المثال A ، B ، C ، D ، E… 5 ، 4 ، 3 ، 2 ، 1 ...)
|
تقوم الدالة `sort()` بفرز قيم صفيف بترتيب أبجدي / رقمي تصاعدي (على سبيل المثال A ، B ، C ، D ، E… 5 ، 4 ، 3 ، 2 ، 1 ...)
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
$freecodecamp = array("free", "code", "camp");
|
<?php
|
||||||
sort($freecodecamp);
|
$freecodecamp = array("free", "code", "camp");
|
||||||
print_r($freecodecamp);
|
sort($freecodecamp);
|
||||||
`
|
print_r($freecodecamp);
|
||||||
|
```
|
||||||
|
|
||||||
**انتاج:**
|
**انتاج:**
|
||||||
|
|
||||||
`Array
|
```text
|
||||||
(
|
Array
|
||||||
[0] => camp
|
(
|
||||||
[1] => code
|
[0] => camp
|
||||||
[2] => free
|
[1] => code
|
||||||
)
|
[2] => free
|
||||||
`
|
)
|
||||||
|
```
|
||||||
|
|
||||||
### rsort ()
|
### rsort ()
|
||||||
|
|
||||||
تقوم `rsort()` بفرز قيم صفيف في ترتيب أبجدي / رقمي تنازلي (Eg Z، Y، X، W، V… 5، 4، 3، 2، 1…)
|
تقوم `rsort()` بفرز قيم صفيف في ترتيب أبجدي / رقمي تنازلي (Eg Z، Y، X، W، V… 5، 4، 3، 2، 1…)
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
$freecodecamp = array("free", "code", "camp");
|
<?php
|
||||||
rsort($freecodecamp);
|
$freecodecamp = array("free", "code", "camp");
|
||||||
print_r($freecodecamp);
|
rsort($freecodecamp);
|
||||||
`
|
print_r($freecodecamp);
|
||||||
|
```
|
||||||
|
|
||||||
**انتاج:**
|
**انتاج:**
|
||||||
|
|
||||||
`Array
|
```text
|
||||||
(
|
Array
|
||||||
[0] => free
|
(
|
||||||
[1] => code
|
[0] => free
|
||||||
[2] => camp
|
[1] => code
|
||||||
)
|
[2] => camp
|
||||||
`
|
)
|
||||||
|
```
|
||||||
|
|
||||||
### asort ()
|
### asort ()
|
||||||
|
|
||||||
تقوم الدالة `asort()` بفرز مصفوفة ارتباطية ، حسب قيمها ، بترتيب أبجدي / رقمي تصاعدي (على سبيل المثال A ، B ، C ، D ، E… 5 ، 4 ، 3 ، 2 ، 1 ...)
|
تقوم الدالة `asort()` بفرز مصفوفة ارتباطية ، حسب قيمها ، بترتيب أبجدي / رقمي تصاعدي (على سبيل المثال A ، B ، C ، D ، E… 5 ، 4 ، 3 ، 2 ، 1 ...)
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
$freecodecamp = array("zero"=>"free", "one"=>"code", "two"=>"camp");
|
<?php
|
||||||
asort($freecodecamp);
|
$freecodecamp = array("zero"=>"free", "one"=>"code", "two"=>"camp");
|
||||||
print_r($freecodecamp);
|
asort($freecodecamp);
|
||||||
`
|
print_r($freecodecamp);
|
||||||
|
```
|
||||||
|
|
||||||
**انتاج:**
|
**انتاج:**
|
||||||
|
|
||||||
`Array
|
```text
|
||||||
(
|
Array
|
||||||
[two] => camp
|
(
|
||||||
[one] => code
|
[two] => camp
|
||||||
[zero] => free
|
[one] => code
|
||||||
)
|
[zero] => free
|
||||||
`
|
)
|
||||||
|
```
|
||||||
|
|
||||||
### ksort ()
|
### ksort ()
|
||||||
|
|
||||||
تقوم `ksort()` بترتيب مصفوفة `ksort()` ، حسب مفاتيحها ، بترتيب أبجدي / رقمي تصاعدي (على سبيل المثال A ، B ، C ، D ، E… 5 ، 4 ، 3 ، 2 ، 1 ...)
|
تقوم `ksort()` بترتيب مصفوفة `ksort()` ، حسب مفاتيحها ، بترتيب أبجدي / رقمي تصاعدي (على سبيل المثال A ، B ، C ، D ، E… 5 ، 4 ، 3 ، 2 ، 1 ...)
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
$freecodecamp = array("zero"=>"free", "one"=>"code", "two"=>"camp");
|
<?php
|
||||||
ksort($freecodecamp);
|
$freecodecamp = array("zero"=>"free", "one"=>"code", "two"=>"camp");
|
||||||
print_r($freecodecamp);
|
ksort($freecodecamp);
|
||||||
`
|
print_r($freecodecamp);
|
||||||
|
```
|
||||||
|
|
||||||
**انتاج:**
|
**انتاج:**
|
||||||
|
|
||||||
`Array
|
```text
|
||||||
(
|
Array
|
||||||
[one] => code
|
(
|
||||||
[two] => camp
|
[one] => code
|
||||||
[zero] => free
|
[two] => camp
|
||||||
)
|
[zero] => free
|
||||||
`
|
)
|
||||||
|
```
|
||||||
|
|
||||||
### arsort ()
|
### arsort ()
|
||||||
|
|
||||||
تقوم `arsort()` بترتيب مصفوفة `arsort()` ، حسب قيمها ، بترتيب أبجدي / رقمي تنازلي (Eg Z ، Y ، X ، W ، V… 5 ، 4 ، 3 ، 2 ، 1 ...)
|
تقوم `arsort()` بترتيب مصفوفة `arsort()` ، حسب قيمها ، بترتيب أبجدي / رقمي تنازلي (Eg Z ، Y ، X ، W ، V… 5 ، 4 ، 3 ، 2 ، 1 ...)
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
$freecodecamp = array("zero"=>"free", "one"=>"code", "two"=>"camp");
|
<?php
|
||||||
arsort($freecodecamp);
|
$freecodecamp = array("zero"=>"free", "one"=>"code", "two"=>"camp");
|
||||||
print_r($freecodecamp);
|
arsort($freecodecamp);
|
||||||
`
|
print_r($freecodecamp);
|
||||||
|
```
|
||||||
|
|
||||||
**انتاج:**
|
**انتاج:**
|
||||||
|
|
||||||
`Array
|
```text
|
||||||
(
|
Array
|
||||||
[zero] => free
|
(
|
||||||
[one] => code
|
[zero] => free
|
||||||
[two] => camp
|
[one] => code
|
||||||
)
|
[two] => camp
|
||||||
`
|
)
|
||||||
|
```
|
||||||
|
|
||||||
### krsort ()
|
### krsort ()
|
||||||
|
|
||||||
تقوم `krsort()` بترتيب مصفوفة `krsort()` ، من خلال مفاتيحها في ترتيب أبجدي / رقمي تنازلي (Eg Z ، Y ، X ، W ، V… 5 ، 4 ، 3 ، 2 ، 1 ...)
|
تقوم `krsort()` بترتيب مصفوفة `krsort()` ، من خلال مفاتيحها في ترتيب أبجدي / رقمي تنازلي (Eg Z ، Y ، X ، W ، V… 5 ، 4 ، 3 ، 2 ، 1 ...)
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
$freecodecamp = array("zero"=>"free", "one"=>"code", "two"=>"camp");
|
<?php
|
||||||
krsort($freecodecamp);
|
$freecodecamp = array("zero"=>"free", "one"=>"code", "two"=>"camp");
|
||||||
print_r($freecodecamp);
|
krsort($freecodecamp);
|
||||||
`
|
print_r($freecodecamp);
|
||||||
|
```
|
||||||
|
|
||||||
**انتاج:**
|
**انتاج:**
|
||||||
|
|
||||||
`Array
|
```text
|
||||||
(
|
Array
|
||||||
[zero] => free
|
(
|
||||||
[two] => camp
|
[zero] => free
|
||||||
[one] => code
|
[two] => camp
|
||||||
)
|
[one] => code
|
||||||
`
|
)
|
||||||
|
```
|
||||||
|
|
||||||
#### معلومات اكثر:
|
#### معلومات اكثر:
|
||||||
|
|
||||||
|
@ -14,19 +14,21 @@ localeTitle: بناء الجملة الأساسي
|
|||||||
|
|
||||||
# أول صفحة PHP
|
# أول صفحة PHP
|
||||||
|
|
||||||
`The output of that would be :
|
```
|
||||||
`
|
The output of that would be :
|
||||||
|
```
|
||||||
|
|
||||||
أول صفحة PHP
|
أول صفحة PHP
|
||||||
|
|
||||||
مرحبا بالعالم!
|
مرحبا بالعالم!
|
||||||
|
|
||||||
`#### Note: PHP statements end with a semicolon (;).
|
```
|
||||||
|
#### Note: PHP statements end with a semicolon (;).
|
||||||
# Comments in PHP
|
|
||||||
|
# Comments in PHP
|
||||||
PHP supports several ways of commenting:
|
|
||||||
`
|
PHP supports several ways of commenting:
|
||||||
|
```
|
||||||
|
|
||||||
`# PHP Case Sensitivity
|
`# PHP Case Sensitivity
|
||||||
|
|
||||||
@ -35,9 +37,10 @@ localeTitle: بناء الجملة الأساسي
|
|||||||
In the example below, all three echo statements below are legal (and equal):
|
In the example below, all three echo statements below are legal (and equal):
|
||||||
`
|
`
|
||||||
|
|
||||||
`### However; all variable names are case-sensitive.
|
```
|
||||||
|
### However; all variable names are case-sensitive.
|
||||||
In the example below, only the first statement will display the value of the $color variable (this is because $color, $COLOR, and $coLOR are treated as three different variables):
|
|
||||||
`
|
In the example below, only the first statement will display the value of the $color variable (this is because $color, $COLOR, and $coLOR are treated as three different variables):
|
||||||
|
```
|
||||||
|
|
||||||
\`\` \`\`
|
\`\` \`\`
|
@ -87,55 +87,59 @@ _إعادة تسمية الكود مع الميراث في البرمجة الم
|
|||||||
|
|
||||||
بدون الاضطرار إلى إعادة كتابة جميع الرموز الخاصة بفئة `Man` ، يمكننا إعادة استخدام هذا الرمز باستخدام الكلمة الأساسية الممتدة.
|
بدون الاضطرار إلى إعادة كتابة جميع الرموز الخاصة بفئة `Man` ، يمكننا إعادة استخدام هذا الرمز باستخدام الكلمة الأساسية الممتدة.
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
class HealthyMan extends Man
|
<?php
|
||||||
{
|
class HealthyMan extends Man
|
||||||
|
{
|
||||||
}
|
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
الآن لدينا جميع خصائص وأساليب الفصل من رجل داخل `HealthyMan` . يمكننا `HealthyMan` فئة `HealthyMan` للتحقق من هذا سريع حقيقي.
|
الآن لدينا جميع خصائص وأساليب الفصل من رجل داخل `HealthyMan` . يمكننا `HealthyMan` فئة `HealthyMan` للتحقق من هذا سريع حقيقي.
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
$jackie = new HealthyMan('Jackie', 25, '5\' 5"');
|
<?php
|
||||||
// => Our man's name is: Jackie
|
$jackie = new HealthyMan('Jackie', 25, '5\' 5"');
|
||||||
// => He is 25 years old and 5' 5" tall.
|
// => Our man's name is: Jackie
|
||||||
`
|
// => He is 25 years old and 5' 5" tall.
|
||||||
|
```
|
||||||
|
|
||||||
يمكننا المضي قدمًا ووضع رياضة ومشروبات HealthyMan aka aka المفضلة.
|
يمكننا المضي قدمًا ووضع رياضة ومشروبات HealthyMan aka aka المفضلة.
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
$jackie->fav_sports = ['swimming', 'weight training'];
|
<?php
|
||||||
print_r($jackie->fav_sports);
|
$jackie->fav_sports = ['swimming', 'weight training'];
|
||||||
// =>
|
print_r($jackie->fav_sports);
|
||||||
// Array
|
// =>
|
||||||
// (
|
// Array
|
||||||
// [0] => swimming
|
// (
|
||||||
// [1] => weight training
|
// [0] => swimming
|
||||||
// )
|
// [1] => weight training
|
||||||
|
// )
|
||||||
$jackie->setFavDrinks(['Matcha tea', 'Oolong Tea']);
|
|
||||||
print_r($jackie->getFavDrinks());
|
$jackie->setFavDrinks(['Matcha tea', 'Oolong Tea']);
|
||||||
// =>
|
print_r($jackie->getFavDrinks());
|
||||||
// Array
|
// =>
|
||||||
// (
|
// Array
|
||||||
// [0] => Matcha tea
|
// (
|
||||||
// [1] => Oolong Tea
|
// [0] => Matcha tea
|
||||||
// )
|
// [1] => Oolong Tea
|
||||||
`
|
// )
|
||||||
|
```
|
||||||
|
|
||||||
الآن دعنا نرى ما إذا كان باستطاعتنا الاتصال بطرق `giveFirmHandshakes()` الرجل مثل `giveFirmHandshakes()` و `beStubborn()` و `notPutToiletPaper()` .
|
الآن دعنا نرى ما إذا كان باستطاعتنا الاتصال بطرق `giveFirmHandshakes()` الرجل مثل `giveFirmHandshakes()` و `beStubborn()` و `notPutToiletPaper()` .
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
echo "\n" . $jackie->giveFirmHandshakes();
|
<?php
|
||||||
// => I give firm handshakes.
|
echo "\n" . $jackie->giveFirmHandshakes();
|
||||||
|
// => I give firm handshakes.
|
||||||
echo "\n" . $jackie->beStubborn();
|
|
||||||
// => I am stubborn.
|
echo "\n" . $jackie->beStubborn();
|
||||||
|
// => I am stubborn.
|
||||||
echo "\n" . $jackie->notPutToiletPaper();
|
|
||||||
// => It's not humanly possible to remember to put toilet paper rolls when they are finished
|
echo "\n" . $jackie->notPutToiletPaper();
|
||||||
`
|
// => It's not humanly possible to remember to put toilet paper rolls when they are finished
|
||||||
|
```
|
||||||
|
|
||||||
نحصل على كل هذه الأشياء من خلال مجرد ترميز فئة رجل باستخدام الكلمة الأساسية الممتدة.
|
نحصل على كل هذه الأشياء من خلال مجرد ترميز فئة رجل باستخدام الكلمة الأساسية الممتدة.
|
||||||
|
|
||||||
@ -201,25 +205,26 @@ _إعادة تسمية الكود مع الميراث في البرمجة الم
|
|||||||
|
|
||||||
يمكننا استدعاء هذه الطرق لمعرفة ما إذا كانت تعمل كما هو متوقع:
|
يمكننا استدعاء هذه الطرق لمعرفة ما إذا كانت تعمل كما هو متوقع:
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
|
<?php
|
||||||
echo "\n" . $jackie->eatHealthy();
|
|
||||||
// => I only eat healthy meals.
|
echo "\n" . $jackie->eatHealthy();
|
||||||
|
// => I only eat healthy meals.
|
||||||
echo "\n" . $jackie->meditateDaily();
|
|
||||||
// => I set aside 20 minutes daily to meditate.
|
echo "\n" . $jackie->meditateDaily();
|
||||||
|
// => I set aside 20 minutes daily to meditate.
|
||||||
echo "\n" . $jackie->laughOften();
|
|
||||||
// => I watch funny TV shows to unwind myself.
|
echo "\n" . $jackie->laughOften();
|
||||||
|
// => I watch funny TV shows to unwind myself.
|
||||||
$jackie->setBodyFatPercentage(12);
|
|
||||||
echo "\nBody Fat %: " . $jackie->getBodyFatPercentage();
|
$jackie->setBodyFatPercentage(12);
|
||||||
// => Body Fat %: 12
|
echo "\nBody Fat %: " . $jackie->getBodyFatPercentage();
|
||||||
|
// => Body Fat %: 12
|
||||||
$jackie->setWorkoutPerWeek(5);
|
|
||||||
echo "\nWorkout Times Per Week: " . $jackie->getWorkoutPerWeek();
|
$jackie->setWorkoutPerWeek(5);
|
||||||
// => Workout Times Per Week: 5
|
echo "\nWorkout Times Per Week: " . $jackie->getWorkoutPerWeek();
|
||||||
`
|
// => Workout Times Per Week: 5
|
||||||
|
```
|
||||||
|
|
||||||
لقد نجحنا في إعادة استخدام الشفرة الحالية ونفذنا برنامجًا دراسيًا للأطفال.
|
لقد نجحنا في إعادة استخدام الشفرة الحالية ونفذنا برنامجًا دراسيًا للأطفال.
|
||||||
|
|
||||||
@ -227,28 +232,30 @@ _إعادة تسمية الكود مع الميراث في البرمجة الم
|
|||||||
|
|
||||||
على الرغم من أنه ورث عن `beStubborn()` من فئة Man ، حيث أن Jackie رجل سليم ، فهو عنيد فقط مرة واحدة فقط في فترة. يمكننا أن نحصل على `beStubborn()` " `beStubborn()` Healthy Man's `beStubborn()` " ليقول "أنا عنيد من حين `beStubborn()` " بدلاً من "أنا عنيد" فقط عن طريق تجاوز أسلوب "الطبقة الأم".
|
على الرغم من أنه ورث عن `beStubborn()` من فئة Man ، حيث أن Jackie رجل سليم ، فهو عنيد فقط مرة واحدة فقط في فترة. يمكننا أن نحصل على `beStubborn()` " `beStubborn()` Healthy Man's `beStubborn()` " ليقول "أنا عنيد من حين `beStubborn()` " بدلاً من "أنا عنيد" فقط عن طريق تجاوز أسلوب "الطبقة الأم".
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
class HealthyMan extends Man
|
<?php
|
||||||
{
|
class HealthyMan extends Man
|
||||||
.....
|
{
|
||||||
.....
|
.....
|
||||||
|
.....
|
||||||
public function beStubborn()
|
|
||||||
{
|
public function beStubborn()
|
||||||
return "I am stubborn once in a while.";
|
{
|
||||||
}
|
return "I am stubborn once in a while.";
|
||||||
|
}
|
||||||
.....
|
|
||||||
.....
|
.....
|
||||||
}
|
.....
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
الآن عندما نتمكن من `beStubborn()` طريقة `beStubborn()` ، سنرى مخرجًا مختلفًا عن ذي قبل:
|
الآن عندما نتمكن من `beStubborn()` طريقة `beStubborn()` ، سنرى مخرجًا مختلفًا عن ذي قبل:
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
echo "\n" . $jackie->beStubborn();
|
<?php
|
||||||
// => I am stubborn once in a while.
|
echo "\n" . $jackie->beStubborn();
|
||||||
`
|
// => I am stubborn once in a while.
|
||||||
|
```
|
||||||
|
|
||||||
يوضح هذا كيف يعمل overriding الأسلوب في OOP.
|
يوضح هذا كيف يعمل overriding الأسلوب في OOP.
|
||||||
|
|
||||||
|
@ -4,25 +4,26 @@ localeTitle: PHP - الصف
|
|||||||
---
|
---
|
||||||
### فئة بسيطة للمبتدئين!
|
### فئة بسيطة للمبتدئين!
|
||||||
|
|
||||||
`class Lab {
|
```php
|
||||||
private $name = '';
|
class Lab {
|
||||||
|
private $name = '';
|
||||||
public function setName($name) {
|
|
||||||
$this->name = $name;
|
public function setName($name) {
|
||||||
}
|
$this->name = $name;
|
||||||
|
}
|
||||||
private function getName() {
|
|
||||||
return $this->name;
|
private function getName() {
|
||||||
}
|
return $this->name;
|
||||||
|
}
|
||||||
public function say_my_name() {
|
|
||||||
$name = $this->getName();
|
public function say_my_name() {
|
||||||
return $name;
|
$name = $this->getName();
|
||||||
}
|
return $name;
|
||||||
|
}
|
||||||
}
|
|
||||||
$breaking_bad = 'Heisenberg';
|
}
|
||||||
$lab = new Lab();
|
$breaking_bad = 'Heisenberg';
|
||||||
$lab->setName($breaking_bad);
|
$lab = new Lab();
|
||||||
echo "My Name is " . $lab->say_my_name(). "!";
|
$lab->setName($breaking_bad);
|
||||||
`
|
echo "My Name is " . $lab->say_my_name(). "!";
|
||||||
|
```
|
@ -8,33 +8,36 @@ localeTitle: الشرطية
|
|||||||
|
|
||||||
### إذا
|
### إذا
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
if ($_GET['name'] = "freecodecamp"){
|
<?php
|
||||||
echo "You viewed the freeCodeCamp Page!";
|
if ($_GET['name'] = "freecodecamp"){
|
||||||
}
|
echo "You viewed the freeCodeCamp Page!";
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### ELSEIF
|
### ELSEIF
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
if ($_GET['name'] = "freecodecamp"){
|
<?php
|
||||||
echo "You viewed the freeCodeCamp Page!";
|
if ($_GET['name'] = "freecodecamp"){
|
||||||
} elseif ($_GET['name'] = "freecodecampguide"){
|
echo "You viewed the freeCodeCamp Page!";
|
||||||
echo "You viewed the freeCodeCamp Guide Page!";
|
} elseif ($_GET['name'] = "freecodecampguide"){
|
||||||
}
|
echo "You viewed the freeCodeCamp Guide Page!";
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### آخر
|
### آخر
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
if ($_GET['name'] = "freecodecamp"){
|
<?php
|
||||||
echo "You viewed the freeCodeCamp Page!";
|
if ($_GET['name'] = "freecodecamp"){
|
||||||
} elseif ($_GET['name'] = "freecodecampguide"){
|
echo "You viewed the freeCodeCamp Page!";
|
||||||
echo "You viewed the freeCodeCamp Guide Page!";
|
} elseif ($_GET['name'] = "freecodecampguide"){
|
||||||
} else {
|
echo "You viewed the freeCodeCamp Guide Page!";
|
||||||
echo "You viewed a page that does not exist yet!";
|
} else {
|
||||||
}
|
echo "You viewed a page that does not exist yet!";
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### ملحوظة
|
### ملحوظة
|
||||||
|
|
||||||
|
@ -12,15 +12,17 @@ localeTitle: الثوابت
|
|||||||
|
|
||||||
### مثال
|
### مثال
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
define("freeCodeCamp", "Learn to code and help nonprofits", false);
|
<?php
|
||||||
echo freeCodeCamp;
|
define("freeCodeCamp", "Learn to code and help nonprofits", false);
|
||||||
`
|
echo freeCodeCamp;
|
||||||
|
```
|
||||||
|
|
||||||
**انتاج:**
|
**انتاج:**
|
||||||
|
|
||||||
`Learn to code and help nonprofits
|
```text
|
||||||
`
|
Learn to code and help nonprofits
|
||||||
|
```
|
||||||
|
|
||||||
#### معلومات اكثر:
|
#### معلومات اكثر:
|
||||||
|
|
||||||
|
@ -6,13 +6,15 @@ localeTitle: يموت والخروج
|
|||||||
|
|
||||||
وظائف `die()` و `exit()` متطابقة. يأخذ كل منهم وسيطة واحدة (سلسلة) تحتوي على رسالة خطأ. عند تشغيلها يقومون بإخراج الرسالة ووقف تنفيذ البرنامج النصي فوراً.
|
وظائف `die()` و `exit()` متطابقة. يأخذ كل منهم وسيطة واحدة (سلسلة) تحتوي على رسالة خطأ. عند تشغيلها يقومون بإخراج الرسالة ووقف تنفيذ البرنامج النصي فوراً.
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
die('Die() function was run');
|
<?php
|
||||||
`
|
die('Die() function was run');
|
||||||
|
```
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
exit('Exit() function was run');
|
<?php
|
||||||
`
|
exit('Exit() function was run');
|
||||||
|
```
|
||||||
|
|
||||||
#### معلومات اكثر:
|
#### معلومات اكثر:
|
||||||
|
|
||||||
|
@ -10,31 +10,35 @@ localeTitle: صدى وطباعة
|
|||||||
|
|
||||||
يكتب الدالة `echo()` قيمة متغير أو وسيطة إلى الشاشة.
|
يكتب الدالة `echo()` قيمة متغير أو وسيطة إلى الشاشة.
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
echo "freeCodeCamp";
|
<?php
|
||||||
`
|
echo "freeCodeCamp";
|
||||||
|
```
|
||||||
|
|
||||||
ملاحظة: طريقة قصيرة لفتح علامة PHP وصدى هو <؟ =
|
ملاحظة: طريقة قصيرة لفتح علامة PHP وصدى هو <؟ =
|
||||||
|
|
||||||
`<?= "freeCodeCamp"; ?>
|
```
|
||||||
`
|
<?= "freeCodeCamp"; ?>
|
||||||
|
```
|
||||||
|
|
||||||
### طباعة
|
### طباعة
|
||||||
|
|
||||||
تعمل وظيفة `print()` خارج قيمة متغير أو وسيطة على الشاشة.
|
تعمل وظيفة `print()` خارج قيمة متغير أو وسيطة على الشاشة.
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
print "freeCodeCamp";
|
<?php
|
||||||
`
|
print "freeCodeCamp";
|
||||||
|
```
|
||||||
|
|
||||||
### print\_r
|
### print\_r
|
||||||
|
|
||||||
تكتب الدالة `print_r()` قيمة أي متغير (مثل صفيف) أو وسيطة إلى الشاشة ، بخلاف وظائف الارتداد أو الطباعة التي تكون محدودة بشكل أكبر.
|
تكتب الدالة `print_r()` قيمة أي متغير (مثل صفيف) أو وسيطة إلى الشاشة ، بخلاف وظائف الارتداد أو الطباعة التي تكون محدودة بشكل أكبر.
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
$freecodecamp = "freeCodeCamp";
|
<?php
|
||||||
print_r($freecodecamp);
|
$freecodecamp = "freeCodeCamp";
|
||||||
`
|
print_r($freecodecamp);
|
||||||
|
```
|
||||||
|
|
||||||
#### معلومات اكثر:
|
#### معلومات اكثر:
|
||||||
|
|
||||||
|
@ -8,34 +8,37 @@ localeTitle: المهام
|
|||||||
|
|
||||||
### وظيفة بسيطة + دعوة
|
### وظيفة بسيطة + دعوة
|
||||||
|
|
||||||
`function say_hello() {
|
```php
|
||||||
return "Hello!";
|
function say_hello() {
|
||||||
}
|
return "Hello!";
|
||||||
|
}
|
||||||
echo say_hello();
|
|
||||||
`
|
echo say_hello();
|
||||||
|
```
|
||||||
|
|
||||||
### وظيفة بسيطة + معلمة + مكالمة
|
### وظيفة بسيطة + معلمة + مكالمة
|
||||||
|
|
||||||
`function say_hello($friend) {
|
```php
|
||||||
return "Hello " . $friend . "!";
|
function say_hello($friend) {
|
||||||
}
|
return "Hello " . $friend . "!";
|
||||||
|
}
|
||||||
echo say_hello('Tommy');
|
|
||||||
`
|
echo say_hello('Tommy');
|
||||||
|
```
|
||||||
|
|
||||||
### strtoupper - يجعل جميع الشخصيات أكبر وأكبر!
|
### strtoupper - يجعل جميع الشخصيات أكبر وأكبر!
|
||||||
|
|
||||||
`function makeItBIG($a_lot_of_names) {
|
```php
|
||||||
foreach($a_lot_of_names as $the_simpsons) {
|
function makeItBIG($a_lot_of_names) {
|
||||||
$BIG[] = strtoupper($the_simpsons);
|
foreach($a_lot_of_names as $the_simpsons) {
|
||||||
}
|
$BIG[] = strtoupper($the_simpsons);
|
||||||
return $BIG;
|
}
|
||||||
}
|
return $BIG;
|
||||||
|
}
|
||||||
$a_lot_of_names = ['Homer', 'Marge', 'Bart', 'Maggy', 'Lisa'];
|
|
||||||
var_dump(makeItBIG($a_lot_of_names));
|
$a_lot_of_names = ['Homer', 'Marge', 'Bart', 'Maggy', 'Lisa'];
|
||||||
`
|
var_dump(makeItBIG($a_lot_of_names));
|
||||||
|
```
|
||||||
|
|
||||||
#### معلومات اكثر:
|
#### معلومات اكثر:
|
||||||
|
|
||||||
|
@ -8,14 +8,16 @@ localeTitle: زمن
|
|||||||
|
|
||||||
### مثال
|
### مثال
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
echo time();
|
<?php
|
||||||
`
|
echo time();
|
||||||
|
```
|
||||||
|
|
||||||
**انتاج:**
|
**انتاج:**
|
||||||
|
|
||||||
`1511732226
|
```text
|
||||||
`
|
1511732226
|
||||||
|
```
|
||||||
|
|
||||||
#### معلومات اكثر:
|
#### معلومات اكثر:
|
||||||
|
|
||||||
|
@ -18,27 +18,30 @@ localeTitle: PHP - مرحبا العالم
|
|||||||
|
|
||||||
يبدأ البرنامج النصي لـ PHP `<?php` وينتهي بـ `?>` :
|
يبدأ البرنامج النصي لـ PHP `<?php` وينتهي بـ `?>` :
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
// PHP code goes here
|
<?php
|
||||||
?>
|
// PHP code goes here
|
||||||
`
|
?>
|
||||||
|
```
|
||||||
|
|
||||||
أو يمكنك أيضًا كتابة برنامج نصي PHP يبدأ بـ `<?php` وينتهي بدون `?>` :
|
أو يمكنك أيضًا كتابة برنامج نصي PHP يبدأ بـ `<?php` وينتهي بدون `?>` :
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
// PHP code goes here
|
<?php
|
||||||
`
|
// PHP code goes here
|
||||||
|
```
|
||||||
|
|
||||||
أدناه ، لدينا مثال لملف PHP بسيط ، مع برنامج نصي PHP الذي يستخدم دالة PHP مدمجة "echo" لإخراج النص "Hello World!" على صفحة الويب:
|
أدناه ، لدينا مثال لملف PHP بسيط ، مع برنامج نصي PHP الذي يستخدم دالة PHP مدمجة "echo" لإخراج النص "Hello World!" على صفحة الويب:
|
||||||
|
|
||||||
`<!DOCTYPE html>
|
```php
|
||||||
<html>
|
<!DOCTYPE html>
|
||||||
<body>
|
<html>
|
||||||
|
<body>
|
||||||
<?php
|
|
||||||
echo "My first PHP script!";
|
<?php
|
||||||
?>
|
echo "My first PHP script!";
|
||||||
|
?>
|
||||||
</body>
|
|
||||||
</html>
|
</body>
|
||||||
`
|
</html>
|
||||||
|
```
|
@ -48,18 +48,21 @@ PHP هي لغة مفسرة. هذا يعني أنه عند إجراء تغيير
|
|||||||
|
|
||||||
على توزيعات جنو / لينكس القائمة على ديبيان ، يمكنك التثبيت من خلال:
|
على توزيعات جنو / لينكس القائمة على ديبيان ، يمكنك التثبيت من خلال:
|
||||||
|
|
||||||
`sudo apt install php
|
```bash
|
||||||
`
|
sudo apt install php
|
||||||
|
```
|
||||||
|
|
||||||
بعد التثبيت ، يمكنك تشغيل أي ملفات PHP ببساطة عن طريق القيام بذلك في المحطة الطرفية:
|
بعد التثبيت ، يمكنك تشغيل أي ملفات PHP ببساطة عن طريق القيام بذلك في المحطة الطرفية:
|
||||||
|
|
||||||
`php file.php
|
```
|
||||||
`
|
php file.php
|
||||||
|
```
|
||||||
|
|
||||||
يمكنك أيضًا تثبيت خادم localhost لتشغيل مواقع PHP على الويب. لتثبيت Apache Web Server:
|
يمكنك أيضًا تثبيت خادم localhost لتشغيل مواقع PHP على الويب. لتثبيت Apache Web Server:
|
||||||
|
|
||||||
`sudo apt install apache2 libapache2-mod-php
|
```
|
||||||
`
|
sudo apt install apache2 libapache2-mod-php
|
||||||
|
```
|
||||||
|
|
||||||
## ماذا يمكن أن تفعل PHP؟
|
## ماذا يمكن أن تفعل PHP؟
|
||||||
|
|
||||||
|
@ -19,30 +19,33 @@ localeTitle: عقدة
|
|||||||
|
|
||||||
## بناء الجملة
|
## بناء الجملة
|
||||||
|
|
||||||
`for (init counter; condition; counter increment or decrement)
|
```
|
||||||
{
|
for (init counter; condition; counter increment or decrement)
|
||||||
// Code to be executed
|
{
|
||||||
}
|
// Code to be executed
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## مثال
|
## مثال
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
for($index = 0; $index < 5; $index ++)
|
<?php
|
||||||
{
|
for($index = 0; $index < 5; $index ++)
|
||||||
echo "Current loop counter ".$index.".\n";
|
{
|
||||||
}
|
echo "Current loop counter ".$index.".\n";
|
||||||
?>
|
}
|
||||||
`
|
?>
|
||||||
|
```
|
||||||
|
|
||||||
## انتاج |
|
## انتاج |
|
||||||
|
|
||||||
`> Current loop counter 0.
|
```
|
||||||
> Current loop counter 1.
|
> Current loop counter 0.
|
||||||
> Current loop counter 2.
|
> Current loop counter 1.
|
||||||
> Current loop counter 3.
|
> Current loop counter 2.
|
||||||
> Current loop counter 4.
|
> Current loop counter 3.
|
||||||
`
|
> Current loop counter 4.
|
||||||
|
```
|
||||||
|
|
||||||
# حائط اللوب
|
# حائط اللوب
|
||||||
|
|
||||||
@ -50,38 +53,41 @@ localeTitle: عقدة
|
|||||||
|
|
||||||
## بناء الجملة
|
## بناء الجملة
|
||||||
|
|
||||||
`while (condition)
|
```
|
||||||
{
|
while (condition)
|
||||||
// Code to be executed
|
{
|
||||||
}
|
// Code to be executed
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## مثال
|
## مثال
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
$index = 10;
|
<?php
|
||||||
while ($index >= 0)
|
$index = 10;
|
||||||
{
|
while ($index >= 0)
|
||||||
echo "The index is ".$index.".\n";
|
{
|
||||||
$index--;
|
echo "The index is ".$index.".\n";
|
||||||
}
|
$index--;
|
||||||
?>
|
}
|
||||||
`
|
?>
|
||||||
|
```
|
||||||
|
|
||||||
## انتاج |
|
## انتاج |
|
||||||
|
|
||||||
`> The index is 10.
|
```
|
||||||
> The index is 9.
|
> The index is 10.
|
||||||
> The index is 8.
|
> The index is 9.
|
||||||
> The index is 7.
|
> The index is 8.
|
||||||
> The index is 6.
|
> The index is 7.
|
||||||
> The index is 5.
|
> The index is 6.
|
||||||
> The index is 4.
|
> The index is 5.
|
||||||
> The index is 3.
|
> The index is 4.
|
||||||
> The index is 2.
|
> The index is 3.
|
||||||
> The index is 1.
|
> The index is 2.
|
||||||
> The index is 0.
|
> The index is 1.
|
||||||
`
|
> The index is 0.
|
||||||
|
```
|
||||||
|
|
||||||
# هل ... في حين حلقة
|
# هل ... في حين حلقة
|
||||||
|
|
||||||
@ -89,33 +95,36 @@ localeTitle: عقدة
|
|||||||
|
|
||||||
## بناء الجملة
|
## بناء الجملة
|
||||||
|
|
||||||
`do
|
```
|
||||||
{
|
do
|
||||||
// Code to be executed
|
{
|
||||||
}
|
// Code to be executed
|
||||||
while (condition);
|
}
|
||||||
`
|
while (condition);
|
||||||
|
```
|
||||||
|
|
||||||
## مثال
|
## مثال
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
$index = 3;
|
<?php
|
||||||
do
|
$index = 3;
|
||||||
{
|
do
|
||||||
// execute this at least 1 time
|
{
|
||||||
echo "Index: ".$index.".\n";
|
// execute this at least 1 time
|
||||||
$index --;
|
echo "Index: ".$index.".\n";
|
||||||
}
|
$index --;
|
||||||
while ($index > 0);
|
}
|
||||||
?>
|
while ($index > 0);
|
||||||
`
|
?>
|
||||||
|
```
|
||||||
|
|
||||||
## انتاج |
|
## انتاج |
|
||||||
|
|
||||||
`> Index: 3.
|
```
|
||||||
> Index: 2.
|
> Index: 3.
|
||||||
> Index: 1.
|
> Index: 2.
|
||||||
`
|
> Index: 1.
|
||||||
|
```
|
||||||
|
|
||||||
# حلقة foreach
|
# حلقة foreach
|
||||||
|
|
||||||
@ -123,11 +132,12 @@ localeTitle: عقدة
|
|||||||
|
|
||||||
## بناء الجملة
|
## بناء الجملة
|
||||||
|
|
||||||
`foreach ($array as $value)
|
```
|
||||||
{
|
foreach ($array as $value)
|
||||||
// Code to be executed
|
{
|
||||||
}
|
// Code to be executed
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## مثال
|
## مثال
|
||||||
|
|
||||||
@ -150,11 +160,12 @@ localeTitle: عقدة
|
|||||||
|
|
||||||
## انتاج |
|
## انتاج |
|
||||||
|
|
||||||
`> Hi, my name is Ali.
|
```
|
||||||
> Hi, my name is Ah Kao.
|
> Hi, my name is Ali.
|
||||||
> Hi, my name is Muthu.
|
> Hi, my name is Ah Kao.
|
||||||
> Hi, my name is Gwen.
|
> Hi, my name is Muthu.
|
||||||
> Hi, my name is Lucida.
|
> Hi, my name is Gwen.
|
||||||
> Hi, my name is Cecily.
|
> Hi, my name is Lucida.
|
||||||
> "Hello, Cecily!"
|
> Hi, my name is Cecily.
|
||||||
`
|
> "Hello, Cecily!"
|
||||||
|
```
|
@ -40,19 +40,21 @@ localeTitle: لحلقة
|
|||||||
|
|
||||||
عند الفهرسة عبر مصفوفة عدة مرات ، من السهل تجاوز حدود الصفيف (على سبيل المثال ، حاول أن ترجع العنصر الرابع في صفيف مكون من 3 عناصر).
|
عند الفهرسة عبر مصفوفة عدة مرات ، من السهل تجاوز حدود الصفيف (على سبيل المثال ، حاول أن ترجع العنصر الرابع في صفيف مكون من 3 عناصر).
|
||||||
|
|
||||||
`// This will cause an error.
|
```php
|
||||||
// The bounds of the array will be exceeded.
|
// This will cause an error.
|
||||||
$arr = array(1,2,3);
|
// The bounds of the array will be exceeded.
|
||||||
|
$arr = array(1,2,3);
|
||||||
for ($i = 0; $i <= count($arr); $i++) {
|
|
||||||
var_dump($arr[$i]);
|
for ($i = 0; $i <= count($arr); $i++) {
|
||||||
}
|
var_dump($arr[$i]);
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
هذا سوف يخرج:
|
هذا سوف يخرج:
|
||||||
|
|
||||||
`int(1) int(2) int(3) NULL
|
```txt
|
||||||
`
|
int(1) int(2) int(3) NULL
|
||||||
|
```
|
||||||
|
|
||||||
هناك طرق لإصلاح هذا الرمز.
|
هناك طرق لإصلاح هذا الرمز.
|
||||||
|
|
||||||
@ -64,9 +66,10 @@ localeTitle: لحلقة
|
|||||||
|
|
||||||
لحل هذه المشكلة ، من الممكن وضع حجم الصفيف في متغير.
|
لحل هذه المشكلة ، من الممكن وضع حجم الصفيف في متغير.
|
||||||
|
|
||||||
`//create the $size variable with a second expression comma separated
|
```php
|
||||||
for ($i = 0, $size = count($arr); $i < $size; ++$i) {
|
//create the $size variable with a second expression comma separated
|
||||||
`
|
for ($i = 0, $size = count($arr); $i < $size; ++$i) {
|
||||||
|
```
|
||||||
|
|
||||||
### معلومات اكثر
|
### معلومات اكثر
|
||||||
|
|
||||||
|
@ -6,17 +6,19 @@ localeTitle: حائط اللوب
|
|||||||
|
|
||||||
تعد `while loop` واحدة من أسهل أنواع الحلقات في PHP. ينفذ كتلة البيانات حتى يتم تقييم التعبير إلى **TRUE** . إذا تغيرت قيمة التعبير في وقت التنفيذ ، فستعمل الحلقة حتى يتم تقييم التعبير إلى **FALSE** . يتم إعطاء النموذج الأساسي لحلقة While أدناه:
|
تعد `while loop` واحدة من أسهل أنواع الحلقات في PHP. ينفذ كتلة البيانات حتى يتم تقييم التعبير إلى **TRUE** . إذا تغيرت قيمة التعبير في وقت التنفيذ ، فستعمل الحلقة حتى يتم تقييم التعبير إلى **FALSE** . يتم إعطاء النموذج الأساسي لحلقة While أدناه:
|
||||||
|
|
||||||
`while (expr)
|
```shell
|
||||||
statement
|
while (expr)
|
||||||
`
|
statement
|
||||||
|
```
|
||||||
|
|
||||||
يمكن تضمين البيانات داخل الحلقة أثناء الأقواس المعقوفة أو يمكن استخدامها بناء على الصيغة التالية:
|
يمكن تضمين البيانات داخل الحلقة أثناء الأقواس المعقوفة أو يمكن استخدامها بناء على الصيغة التالية:
|
||||||
|
|
||||||
`while (expr):
|
```shell
|
||||||
statement
|
while (expr):
|
||||||
...
|
statement
|
||||||
endwhile;
|
...
|
||||||
`
|
endwhile;
|
||||||
|
```
|
||||||
|
|
||||||
توضيح بناء الجملة البسيط والبديل من حلقة أثناء استخدام المثال:
|
توضيح بناء الجملة البسيط والبديل من حلقة أثناء استخدام المثال:
|
||||||
|
|
||||||
|
@ -16,32 +16,33 @@ localeTitle: البرمجة الشيئية
|
|||||||
|
|
||||||
مع وضع هذه الأمور في الاعتبار ، لم يعد إنشاء فئة رجل أمرًا صعبًا بعد الآن. لذا ، سيذهب البرنامج هكذا.
|
مع وضع هذه الأمور في الاعتبار ، لم يعد إنشاء فئة رجل أمرًا صعبًا بعد الآن. لذا ، سيذهب البرنامج هكذا.
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
|
<?php
|
||||||
class Man
|
|
||||||
{
|
class Man
|
||||||
public $name;
|
{
|
||||||
public $age;
|
public $name;
|
||||||
public $height;
|
public $age;
|
||||||
public $fav_sports;
|
public $height;
|
||||||
public $fav_drinks;
|
public $fav_sports;
|
||||||
|
public $fav_drinks;
|
||||||
public function giveFirmHandshakes()
|
|
||||||
{
|
public function giveFirmHandshakes()
|
||||||
return "I give firm handshakes.";
|
{
|
||||||
}
|
return "I give firm handshakes.";
|
||||||
|
}
|
||||||
public function beStubborn()
|
|
||||||
{
|
public function beStubborn()
|
||||||
return "I am stubborn.";
|
{
|
||||||
}
|
return "I am stubborn.";
|
||||||
|
}
|
||||||
public function notPutToiletPaper()
|
|
||||||
{
|
public function notPutToiletPaper()
|
||||||
return "It's not humanly possible to remember to put toilet paper rolls when they are finished";
|
{
|
||||||
}
|
return "It's not humanly possible to remember to put toilet paper rolls when they are finished";
|
||||||
}
|
}
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### الرجل الهدف
|
### الرجل الهدف
|
||||||
|
|
||||||
@ -90,20 +91,22 @@ localeTitle: البرمجة الشيئية
|
|||||||
|
|
||||||
لنأخذ هذه الفكرة خطوة أخرى ونجعل جاك يبدأ في تقديم نفسه كلما أنشأنا كائن جاك دون الاضطرار إلى طباعته بشكل فردي على النحو التالي:
|
لنأخذ هذه الفكرة خطوة أخرى ونجعل جاك يبدأ في تقديم نفسه كلما أنشأنا كائن جاك دون الاضطرار إلى طباعته بشكل فردي على النحو التالي:
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
// Print out Jack's attributes and values
|
<?php
|
||||||
echo "Our man's name is: " . $jack->name . "\n";
|
// Print out Jack's attributes and values
|
||||||
echo "He is " . $jack->age . " years old and " . $jack->height . " tall.";
|
echo "Our man's name is: " . $jack->name . "\n";
|
||||||
`
|
echo "He is " . $jack->age . " years old and " . $jack->height . " tall.";
|
||||||
|
```
|
||||||
|
|
||||||
هذا هو المكان الصانعين يلعبون. إن المنشئات هي أساليب خاصة يتم استدعائها عند إنشاء كائن.
|
هذا هو المكان الصانعين يلعبون. إن المنشئات هي أساليب خاصة يتم استدعائها عند إنشاء كائن.
|
||||||
|
|
||||||
لذا ، فإن الفكرة هي طباعة اسم جاك وعمرها وارتفاعها عندما نقوم بإنشاء كائن "جاك" عن طريق إنشاء دروس للإنسان. ولتحقيق ذلك ، نحتاج إلى تحديد الاسم والعمر والطول عند إنشاء الكائن على النحو التالي:
|
لذا ، فإن الفكرة هي طباعة اسم جاك وعمرها وارتفاعها عندما نقوم بإنشاء كائن "جاك" عن طريق إنشاء دروس للإنسان. ولتحقيق ذلك ، نحتاج إلى تحديد الاسم والعمر والطول عند إنشاء الكائن على النحو التالي:
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
// Create a Man object called "Jack"
|
<?php
|
||||||
$jack = new Man('Jack', 30, '6 feet');
|
// Create a Man object called "Jack"
|
||||||
`
|
$jack = new Man('Jack', 30, '6 feet');
|
||||||
|
```
|
||||||
|
|
||||||
يخبر هذا الكود "رجل الطبقة" بإنشاء كائن به 3 معلمات: "Jack" للاسم ، 30 لـ age و "6 feet" للارتفاع.
|
يخبر هذا الكود "رجل الطبقة" بإنشاء كائن به 3 معلمات: "Jack" للاسم ، 30 لـ age و "6 feet" للارتفاع.
|
||||||
|
|
||||||
@ -131,10 +134,11 @@ localeTitle: البرمجة الشيئية
|
|||||||
|
|
||||||
لذلك ، الآن عندما نقوم بتشكيل فئة Man ، نحتاج إلى وضع 3 معلمات وسيتم طباعتها على الفور.
|
لذلك ، الآن عندما نقوم بتشكيل فئة Man ، نحتاج إلى وضع 3 معلمات وسيتم طباعتها على الفور.
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
// Create a Man object called "Jack"
|
<?php
|
||||||
$jack = new Man('Jack', 30, '6 feet');
|
// Create a Man object called "Jack"
|
||||||
`
|
$jack = new Man('Jack', 30, '6 feet');
|
||||||
|
```
|
||||||
|
|
||||||
`Object created` `Our man's name is: Jack` `He is 30 years old and 6 feet tall.`
|
`Object created` `Our man's name is: Jack` `He is 30 years old and 6 feet tall.`
|
||||||
|
|
||||||
@ -218,10 +222,11 @@ localeTitle: البرمجة الشيئية
|
|||||||
|
|
||||||
إذا لاحظت أن جميع متغيرات الصفوف (الاسم ، العمر ، الطول ، fav _sports و fav_ drinks) يتم الإعلان عنها على أنها عامة داخل فئة Man. الآن ، بعد إنشاء كائن رجل ، لدينا حق الوصول إلى جميع ممتلكاته عن طريق الاتصال بهم ببساطة:
|
إذا لاحظت أن جميع متغيرات الصفوف (الاسم ، العمر ، الطول ، fav _sports و fav_ drinks) يتم الإعلان عنها على أنها عامة داخل فئة Man. الآن ، بعد إنشاء كائن رجل ، لدينا حق الوصول إلى جميع ممتلكاته عن طريق الاتصال بهم ببساطة:
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
echo $jack->name;
|
<?php
|
||||||
echo $jack->height;
|
echo $jack->name;
|
||||||
`
|
echo $jack->height;
|
||||||
|
```
|
||||||
|
|
||||||
ولكن ماذا لو أردنا أن نبقي بعض الأمور سرية عن الرجل؟ ربما لا يريد أن يعرف الجميع سنه ... أو ... ربما يريد فقط بعض الأشخاص أن يعرفوا مشروباته المفضلة. يمكننا تحقيق ذلك عن طريق تغيير مستوى رؤية هذه الخصائص من العامة إلى المحمية وحتى الخاصة.
|
ولكن ماذا لو أردنا أن نبقي بعض الأمور سرية عن الرجل؟ ربما لا يريد أن يعرف الجميع سنه ... أو ... ربما يريد فقط بعض الأشخاص أن يعرفوا مشروباته المفضلة. يمكننا تحقيق ذلك عن طريق تغيير مستوى رؤية هذه الخصائص من العامة إلى المحمية وحتى الخاصة.
|
||||||
|
|
||||||
@ -233,31 +238,33 @@ localeTitle: البرمجة الشيئية
|
|||||||
|
|
||||||
سنتحدث عن وراثة فصل في وقت ما. في الوقت الحالي ، دعنا نحاول تعيين فئة العمر محمية و private\_drinks خاصة في فئة Man.
|
سنتحدث عن وراثة فصل في وقت ما. في الوقت الحالي ، دعنا نحاول تعيين فئة العمر محمية و private\_drinks خاصة في فئة Man.
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
|
<?php
|
||||||
class Man
|
|
||||||
{
|
class Man
|
||||||
// 1. Declare the variables
|
{
|
||||||
public $name;
|
// 1. Declare the variables
|
||||||
protected $age;
|
public $name;
|
||||||
public $height;
|
protected $age;
|
||||||
public $fav_sports;
|
public $height;
|
||||||
private $fav_drinks;
|
public $fav_sports;
|
||||||
.....
|
private $fav_drinks;
|
||||||
.....
|
.....
|
||||||
`
|
.....
|
||||||
|
```
|
||||||
|
|
||||||
الآن إذا حاولت إنشاء مثيل للفئة وتسمية العمر و fav\_drinks ، فسوف تحصل على خطأ.
|
الآن إذا حاولت إنشاء مثيل للفئة وتسمية العمر و fav\_drinks ، فسوف تحصل على خطأ.
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
$jack = new Man('Jack', 30, '6 feet');
|
<?php
|
||||||
|
$jack = new Man('Jack', 30, '6 feet');
|
||||||
echo $jack->age;
|
|
||||||
// Fatal error: Cannot access protected property Man::$age
|
echo $jack->age;
|
||||||
|
// Fatal error: Cannot access protected property Man::$age
|
||||||
print_r($jack->fav_drinks);
|
|
||||||
// Fatal error: Cannot access private property Man::$fav_drinks
|
print_r($jack->fav_drinks);
|
||||||
`
|
// Fatal error: Cannot access private property Man::$fav_drinks
|
||||||
|
```
|
||||||
|
|
||||||
### المحددات والرسومات
|
### المحددات والرسومات
|
||||||
|
|
||||||
@ -265,12 +272,13 @@ localeTitle: البرمجة الشيئية
|
|||||||
|
|
||||||
للحصول على الخصائص المحمية أو الخاصة ، نحتاج إلى إنشاء طريقة getter مثل هذا داخل فئة Man (لاحظ أن هذه طريقة للفصل مع ظهور للجمهور).
|
للحصول على الخصائص المحمية أو الخاصة ، نحتاج إلى إنشاء طريقة getter مثل هذا داخل فئة Man (لاحظ أن هذه طريقة للفصل مع ظهور للجمهور).
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
public function getAge()
|
<?php
|
||||||
{
|
public function getAge()
|
||||||
return $this->age;
|
{
|
||||||
}
|
return $this->age;
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
الآن يمكننا بسهولة الحصول على عمر جاك عن طريق استدعاء هذه الطريقة:
|
الآن يمكننا بسهولة الحصول على عمر جاك عن طريق استدعاء هذه الطريقة:
|
||||||
|
|
||||||
@ -312,9 +320,10 @@ echo $ jack-> getAge ()؛ // 31
|
|||||||
|
|
||||||
للحصول على fav\_srinks من Jack:
|
للحصول على fav\_srinks من Jack:
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
echo json_encode($jack->getFavDrinks());
|
<?php
|
||||||
// ["coffee","green tea"]
|
echo json_encode($jack->getFavDrinks());
|
||||||
`
|
// ["coffee","green tea"]
|
||||||
|
```
|
||||||
|
|
||||||
وتسمى هذه الطريقة في تطبيق واستخدام أساليب الصف لاسترجاع وتحديث خصائص الصفات بالتغليف في البرمجة الشيئية. يمكننا أيضًا تعيين مستوى الرؤية لطرق الصفوف تمامًا مثل الطريقة التي استخدمناها في خصائص الصف.
|
وتسمى هذه الطريقة في تطبيق واستخدام أساليب الصف لاسترجاع وتحديث خصائص الصفات بالتغليف في البرمجة الشيئية. يمكننا أيضًا تعيين مستوى الرؤية لطرق الصفوف تمامًا مثل الطريقة التي استخدمناها في خصائص الصف.
|
@ -53,17 +53,18 @@ localeTitle: صفائف Php
|
|||||||
|
|
||||||
سيؤدي ذلك إلى النتيجة التالية -
|
سيؤدي ذلك إلى النتيجة التالية -
|
||||||
|
|
||||||
`Value is 1
|
```
|
||||||
Value is 2
|
Value is 1
|
||||||
Value is 3
|
Value is 2
|
||||||
Value is 4
|
Value is 3
|
||||||
Value is 5
|
Value is 4
|
||||||
Value is one
|
Value is 5
|
||||||
Value is two
|
Value is one
|
||||||
Value is three
|
Value is two
|
||||||
Value is four
|
Value is three
|
||||||
Value is five
|
Value is four
|
||||||
`
|
Value is five
|
||||||
|
```
|
||||||
|
|
||||||
### صفيفات الارتباط
|
### صفيفات الارتباط
|
||||||
|
|
||||||
@ -101,13 +102,14 @@ localeTitle: صفائف Php
|
|||||||
|
|
||||||
سيؤدي ذلك إلى النتيجة التالية -
|
سيؤدي ذلك إلى النتيجة التالية -
|
||||||
|
|
||||||
`Salary of mohammad is 2000
|
```
|
||||||
Salary of qadir is 1000
|
Salary of mohammad is 2000
|
||||||
Salary of zara is 500
|
Salary of qadir is 1000
|
||||||
Salary of mohammad is high
|
Salary of zara is 500
|
||||||
Salary of qadir is medium
|
Salary of mohammad is high
|
||||||
Salary of zara is low
|
Salary of qadir is medium
|
||||||
`
|
Salary of zara is low
|
||||||
|
```
|
||||||
|
|
||||||
### صفائف متعددة الأبعاد
|
### صفائف متعددة الأبعاد
|
||||||
|
|
||||||
@ -158,7 +160,8 @@ localeTitle: صفائف Php
|
|||||||
|
|
||||||
سيؤدي ذلك إلى النتيجة التالية -
|
سيؤدي ذلك إلى النتيجة التالية -
|
||||||
|
|
||||||
`Marks for mohammad in physics : 35
|
```
|
||||||
Marks for qadir in maths : 32
|
Marks for mohammad in physics : 35
|
||||||
Marks for zara in chemistry : 39
|
Marks for qadir in maths : 32
|
||||||
`
|
Marks for zara in chemistry : 39
|
||||||
|
```
|
@ -28,25 +28,26 @@ localeTitle: الكوكيز بي اتش بي
|
|||||||
|
|
||||||
**مثال:**
|
**مثال:**
|
||||||
|
|
||||||
`<?php
|
```
|
||||||
$cookie_name = "user";
|
<?php
|
||||||
$cookie_value = "John Doe";
|
$cookie_name = "user";
|
||||||
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day
|
$cookie_value = "John Doe";
|
||||||
?>
|
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day
|
||||||
<html>
|
?>
|
||||||
<body>
|
<html>
|
||||||
|
<body>
|
||||||
<?php
|
|
||||||
if(!isset($_COOKIE[$cookie_name])) {
|
<?php
|
||||||
echo "Cookie named '" . $cookie_name . "' is not set!";
|
if(!isset($_COOKIE[$cookie_name])) {
|
||||||
} else {
|
echo "Cookie named '" . $cookie_name . "' is not set!";
|
||||||
echo "Cookie '" . $cookie_name . "' is set!<br>";
|
} else {
|
||||||
echo "Value is: " . $_COOKIE[$cookie_name];
|
echo "Cookie '" . $cookie_name . "' is set!<br>";
|
||||||
}
|
echo "Value is: " . $_COOKIE[$cookie_name];
|
||||||
?>
|
}
|
||||||
</body>
|
?>
|
||||||
</html>
|
</body>
|
||||||
`
|
</html>
|
||||||
|
```
|
||||||
|
|
||||||
**ملاحظة:** يجب أن تظهر الدالة setcookie () **قبل** العلامة.
|
**ملاحظة:** يجب أن تظهر الدالة setcookie () **قبل** العلامة.
|
||||||
|
|
||||||
@ -60,26 +61,27 @@ localeTitle: الكوكيز بي اتش بي
|
|||||||
|
|
||||||
**مثال:**
|
**مثال:**
|
||||||
|
|
||||||
`<?php
|
```
|
||||||
$cookie_name = "user";
|
<?php
|
||||||
$cookie_value = "Jane Porter";
|
$cookie_name = "user";
|
||||||
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/");
|
$cookie_value = "Jane Porter";
|
||||||
?>
|
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/");
|
||||||
<html>
|
?>
|
||||||
<body>
|
<html>
|
||||||
|
<body>
|
||||||
<?php
|
|
||||||
if(!isset($_COOKIE[$cookie_name])) {
|
<?php
|
||||||
echo "Cookie named '" . $cookie_name . "' is not set!";
|
if(!isset($_COOKIE[$cookie_name])) {
|
||||||
} else {
|
echo "Cookie named '" . $cookie_name . "' is not set!";
|
||||||
echo "Cookie '" . $cookie_name . "' is set!<br>";
|
} else {
|
||||||
echo "Value is: " . $_COOKIE[$cookie_name];
|
echo "Cookie '" . $cookie_name . "' is set!<br>";
|
||||||
}
|
echo "Value is: " . $_COOKIE[$cookie_name];
|
||||||
?>
|
}
|
||||||
|
?>
|
||||||
</body>
|
|
||||||
</html>
|
</body>
|
||||||
`
|
</html>
|
||||||
|
```
|
||||||
|
|
||||||
انتاج:
|
انتاج:
|
||||||
تم تعيين Cookie 'user'!
|
تم تعيين Cookie 'user'!
|
||||||
@ -91,20 +93,21 @@ localeTitle: الكوكيز بي اتش بي
|
|||||||
|
|
||||||
**مثال:**
|
**مثال:**
|
||||||
|
|
||||||
`<?php
|
```
|
||||||
// set the expiration date to one hour ago
|
<?php
|
||||||
setcookie("user", "", time() - 3600);
|
// set the expiration date to one hour ago
|
||||||
?>
|
setcookie("user", "", time() - 3600);
|
||||||
<html>
|
?>
|
||||||
<body>
|
<html>
|
||||||
|
<body>
|
||||||
<?php
|
|
||||||
echo "Cookie 'user' is deleted.";
|
<?php
|
||||||
?>
|
echo "Cookie 'user' is deleted.";
|
||||||
|
?>
|
||||||
</body>
|
|
||||||
</html>
|
</body>
|
||||||
`
|
</html>
|
||||||
|
```
|
||||||
|
|
||||||
انتاج:
|
انتاج:
|
||||||
يتم حذف Cookie 'user'.
|
يتم حذف Cookie 'user'.
|
@ -21,9 +21,10 @@ localeTitle: أنواع البيانات PHP
|
|||||||
|
|
||||||
#### مثال
|
#### مثال
|
||||||
|
|
||||||
`$x = "Hello!";
|
```
|
||||||
$y = 'Hello!';
|
$x = "Hello!";
|
||||||
`
|
$y = 'Hello!';
|
||||||
|
```
|
||||||
|
|
||||||
## PHP Integer
|
## PHP Integer
|
||||||
|
|
||||||
@ -52,9 +53,10 @@ localeTitle: أنواع البيانات PHP
|
|||||||
|
|
||||||
Boolean يمثل حالتين محتملتين: TRUE أو FALSE. يتم استخدام Booleans غالبًا في الاختبارات الشرطية.
|
Boolean يمثل حالتين محتملتين: TRUE أو FALSE. يتم استخدام Booleans غالبًا في الاختبارات الشرطية.
|
||||||
|
|
||||||
`$x = true;
|
```
|
||||||
$y = false;
|
$x = true;
|
||||||
`
|
$y = false;
|
||||||
|
```
|
||||||
|
|
||||||
## صفيف PHP
|
## صفيف PHP
|
||||||
|
|
||||||
@ -70,11 +72,12 @@ Null هو نوع بيانات خاص يمكن أن يكون له قيمة واح
|
|||||||
|
|
||||||
**ملاحظة:** إذا تم إنشاء متغير بدون قيمة ، فسيتم تعيين قيمة فارغة له تلقائيًا.
|
**ملاحظة:** إذا تم إنشاء متغير بدون قيمة ، فسيتم تعيين قيمة فارغة له تلقائيًا.
|
||||||
|
|
||||||
`<?php
|
```
|
||||||
$x = "Hello world!";
|
<?php
|
||||||
$x = null;
|
$x = "Hello world!";
|
||||||
?>
|
$x = null;
|
||||||
`
|
?>
|
||||||
|
```
|
||||||
|
|
||||||
انتاج:
|
انتاج:
|
||||||
لا شيء
|
لا شيء
|
||||||
@ -87,17 +90,18 @@ Null هو نوع بيانات خاص يمكن أن يكون له قيمة واح
|
|||||||
|
|
||||||
**مثال:**
|
**مثال:**
|
||||||
|
|
||||||
`<?php
|
```
|
||||||
class Car {
|
<?php
|
||||||
function Car() {
|
class Car {
|
||||||
$this->model = "VW";
|
function Car() {
|
||||||
}
|
$this->model = "VW";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// create an object
|
|
||||||
$herbie = new Car();
|
// create an object
|
||||||
|
$herbie = new Car();
|
||||||
// show object properties
|
|
||||||
echo $herbie->model;
|
// show object properties
|
||||||
?>
|
echo $herbie->model;
|
||||||
`
|
?>
|
||||||
|
```
|
@ -22,13 +22,14 @@ localeTitle: PHP 5 صدى وطباعة البيانات
|
|||||||
|
|
||||||
#### مثال
|
#### مثال
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
echo "<h2>PHP is Fun!</h2>";
|
<?php
|
||||||
echo "Hello world!<br>";
|
echo "<h2>PHP is Fun!</h2>";
|
||||||
echo "I'm about to learn PHP!<br>";
|
echo "Hello world!<br>";
|
||||||
echo "This ", "string ", "was ", "made ", "with multiple parameters.";
|
echo "I'm about to learn PHP!<br>";
|
||||||
?>
|
echo "This ", "string ", "was ", "made ", "with multiple parameters.";
|
||||||
`
|
?>
|
||||||
|
```
|
||||||
|
|
||||||
#### عرض المتغيرات
|
#### عرض المتغيرات
|
||||||
|
|
||||||
@ -36,17 +37,18 @@ localeTitle: PHP 5 صدى وطباعة البيانات
|
|||||||
|
|
||||||
#### مثال
|
#### مثال
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
$txt1 = "Learn PHP";
|
<?php
|
||||||
$txt2 = "W3Schools.com";
|
$txt1 = "Learn PHP";
|
||||||
$x = 5;
|
$txt2 = "W3Schools.com";
|
||||||
$y = 4;
|
$x = 5;
|
||||||
|
$y = 4;
|
||||||
echo "<h2>" . $txt1 . "</h2>";
|
|
||||||
echo "Study PHP at " . $txt2 . "<br>";
|
echo "<h2>" . $txt1 . "</h2>";
|
||||||
echo $x + $y;
|
echo "Study PHP at " . $txt2 . "<br>";
|
||||||
?>
|
echo $x + $y;
|
||||||
`
|
?>
|
||||||
|
```
|
||||||
|
|
||||||
### بيان طباعة PHP
|
### بيان طباعة PHP
|
||||||
|
|
||||||
@ -58,12 +60,13 @@ localeTitle: PHP 5 صدى وطباعة البيانات
|
|||||||
|
|
||||||
#### مثال
|
#### مثال
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
print "<h2>PHP is Fun!</h2>";
|
<?php
|
||||||
print "Hello world!<br>";
|
print "<h2>PHP is Fun!</h2>";
|
||||||
print "I'm about to learn PHP!";
|
print "Hello world!<br>";
|
||||||
?>
|
print "I'm about to learn PHP!";
|
||||||
`
|
?>
|
||||||
|
```
|
||||||
|
|
||||||
#### عرض المتغيرات
|
#### عرض المتغيرات
|
||||||
|
|
||||||
@ -71,14 +74,15 @@ localeTitle: PHP 5 صدى وطباعة البيانات
|
|||||||
|
|
||||||
#### مثال
|
#### مثال
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
$txt1 = "Learn PHP";
|
<?php
|
||||||
$txt2 = "W3Schools.com";
|
$txt1 = "Learn PHP";
|
||||||
$x = 5;
|
$txt2 = "W3Schools.com";
|
||||||
$y = 4;
|
$x = 5;
|
||||||
|
$y = 4;
|
||||||
print "<h2>" . $txt1 . "</h2>";
|
|
||||||
print "Study PHP at " . $txt2 . "<br>";
|
print "<h2>" . $txt1 . "</h2>";
|
||||||
print $x + $y;
|
print "Study PHP at " . $txt2 . "<br>";
|
||||||
?>
|
print $x + $y;
|
||||||
`
|
?>
|
||||||
|
```
|
@ -10,67 +10,72 @@ localeTitle: PHP 5 التعامل مع النموذج
|
|||||||
|
|
||||||
#### مثال
|
#### مثال
|
||||||
|
|
||||||
`<html>
|
```php
|
||||||
<body>
|
<html>
|
||||||
|
<body>
|
||||||
<form action="welcome.php" method="post">
|
|
||||||
Name: <input type="text" name="name"><br>
|
<form action="welcome.php" method="post">
|
||||||
E-mail: <input type="text" name="email"><br>
|
Name: <input type="text" name="name"><br>
|
||||||
<input type="submit">
|
E-mail: <input type="text" name="email"><br>
|
||||||
</form>
|
<input type="submit">
|
||||||
|
</form>
|
||||||
</body>
|
|
||||||
</html>
|
</body>
|
||||||
`
|
</html>
|
||||||
|
```
|
||||||
|
|
||||||
عندما يملأ المستخدم النموذج أعلاه وينقر على زر الإرسال ، يتم إرسال بيانات النموذج للمعالجة إلى ملف PHP المسمى "welcome.php". يتم إرسال بيانات النموذج باستخدام طريقة HTTP POST.
|
عندما يملأ المستخدم النموذج أعلاه وينقر على زر الإرسال ، يتم إرسال بيانات النموذج للمعالجة إلى ملف PHP المسمى "welcome.php". يتم إرسال بيانات النموذج باستخدام طريقة HTTP POST.
|
||||||
|
|
||||||
لعرض البيانات المقدمة ، يمكنك ببساطة ترديد كل المتغيرات. يبدو "welcome.php" كما يلي:
|
لعرض البيانات المقدمة ، يمكنك ببساطة ترديد كل المتغيرات. يبدو "welcome.php" كما يلي:
|
||||||
|
|
||||||
`<html>
|
```php
|
||||||
<body>
|
<html>
|
||||||
|
<body>
|
||||||
Welcome <?php echo $_POST["name"]; ?><br>
|
|
||||||
Your email address is: <?php echo $_POST["email"]; ?>
|
Welcome <?php echo $_POST["name"]; ?><br>
|
||||||
|
Your email address is: <?php echo $_POST["email"]; ?>
|
||||||
</body>
|
|
||||||
</html>
|
</body>
|
||||||
`
|
</html>
|
||||||
|
```
|
||||||
|
|
||||||
يمكن أن يكون الإخراج شيء من هذا القبيل:
|
يمكن أن يكون الإخراج شيء من هذا القبيل:
|
||||||
|
|
||||||
`Welcome John
|
```
|
||||||
Your email address is john.doe@example.com
|
Welcome John
|
||||||
`
|
Your email address is john.doe@example.com
|
||||||
|
```
|
||||||
|
|
||||||
يمكن تحقيق نفس النتيجة باستخدام طريقة HTTP GET:
|
يمكن تحقيق نفس النتيجة باستخدام طريقة HTTP GET:
|
||||||
|
|
||||||
#### مثال
|
#### مثال
|
||||||
|
|
||||||
`<html>
|
```php
|
||||||
<body>
|
<html>
|
||||||
|
<body>
|
||||||
<form action="welcome_get.php" method="get">
|
|
||||||
Name: <input type="text" name="name"><br>
|
<form action="welcome_get.php" method="get">
|
||||||
E-mail: <input type="text" name="email"><br>
|
Name: <input type="text" name="name"><br>
|
||||||
<input type="submit">
|
E-mail: <input type="text" name="email"><br>
|
||||||
</form>
|
<input type="submit">
|
||||||
|
</form>
|
||||||
</body>
|
|
||||||
</html>
|
</body>
|
||||||
`
|
</html>
|
||||||
|
```
|
||||||
|
|
||||||
و "welcome\_get.php" يشبه هذا:
|
و "welcome\_get.php" يشبه هذا:
|
||||||
|
|
||||||
`<html>
|
```php
|
||||||
<body>
|
<html>
|
||||||
|
<body>
|
||||||
Welcome <?php echo $_GET["name"]; ?><br>
|
|
||||||
Your email address is: <?php echo $_GET["email"]; ?>
|
Welcome <?php echo $_GET["name"]; ?><br>
|
||||||
|
Your email address is: <?php echo $_GET["email"]; ?>
|
||||||
</body>
|
|
||||||
</html>
|
</body>
|
||||||
`
|
</html>
|
||||||
|
```
|
||||||
|
|
||||||
الرمز أعلاه بسيط للغاية. ومع ذلك ، فإن الشيء الأكثر أهمية مفقود. يلزمك التحقق من صحة بيانات النموذج لحماية النص البرمجي من الشفرة الضارة.
|
الرمز أعلاه بسيط للغاية. ومع ذلك ، فإن الشيء الأكثر أهمية مفقود. يلزمك التحقق من صحة بيانات النموذج لحماية النص البرمجي من الشفرة الضارة.
|
||||||
|
|
||||||
|
@ -14,44 +14,45 @@ localeTitle: نماذج PHP 5 - الحقول المطلوبة
|
|||||||
|
|
||||||
في الشفرة التالية ، أضفنا بعض المتغيرات الجديدة: $ nameErr و $ emailErr و genderErr و $ websiteErr. سوف تحتوي متغيرات الخطأ هذه على رسائل خطأ للحقول المطلوبة. لقد أضفنا أيضًا جملة if else لكل _متغير POST_ $ _. يتحقق هذا إذا كان_ متغير POST _$_ فارغًا (مع وظيفة PHP فارغة ()). إذا كانت فارغة ، يتم تخزين رسالة خطأ في متغيرات الخطأ المختلفة ، وإذا لم تكن فارغة ، فإنها ترسل بيانات إدخال المستخدم من خلال الدالة test\_input ():
|
في الشفرة التالية ، أضفنا بعض المتغيرات الجديدة: $ nameErr و $ emailErr و genderErr و $ websiteErr. سوف تحتوي متغيرات الخطأ هذه على رسائل خطأ للحقول المطلوبة. لقد أضفنا أيضًا جملة if else لكل _متغير POST_ $ _. يتحقق هذا إذا كان_ متغير POST _$_ فارغًا (مع وظيفة PHP فارغة ()). إذا كانت فارغة ، يتم تخزين رسالة خطأ في متغيرات الخطأ المختلفة ، وإذا لم تكن فارغة ، فإنها ترسل بيانات إدخال المستخدم من خلال الدالة test\_input ():
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
// define variables and set to empty values
|
<?php
|
||||||
$nameErr = $emailErr = $genderErr = $websiteErr = "";
|
// define variables and set to empty values
|
||||||
$name = $email = $gender = $comment = $website = "";
|
$nameErr = $emailErr = $genderErr = $websiteErr = "";
|
||||||
|
$name = $email = $gender = $comment = $website = "";
|
||||||
if ($_SERVER["REQUEST_METHOD"] == "POST") {
|
|
||||||
if (empty($_POST["name"])) {
|
if ($_SERVER["REQUEST_METHOD"] == "POST") {
|
||||||
$nameErr = "Name is required";
|
if (empty($_POST["name"])) {
|
||||||
} else {
|
$nameErr = "Name is required";
|
||||||
$name = test_input($_POST["name"]);
|
} else {
|
||||||
}
|
$name = test_input($_POST["name"]);
|
||||||
|
}
|
||||||
if (empty($_POST["email"])) {
|
|
||||||
$emailErr = "Email is required";
|
if (empty($_POST["email"])) {
|
||||||
} else {
|
$emailErr = "Email is required";
|
||||||
$email = test_input($_POST["email"]);
|
} else {
|
||||||
}
|
$email = test_input($_POST["email"]);
|
||||||
|
}
|
||||||
if (empty($_POST["website"])) {
|
|
||||||
$website = "";
|
if (empty($_POST["website"])) {
|
||||||
} else {
|
$website = "";
|
||||||
$website = test_input($_POST["website"]);
|
} else {
|
||||||
}
|
$website = test_input($_POST["website"]);
|
||||||
|
}
|
||||||
if (empty($_POST["comment"])) {
|
|
||||||
$comment = "";
|
if (empty($_POST["comment"])) {
|
||||||
} else {
|
$comment = "";
|
||||||
$comment = test_input($_POST["comment"]);
|
} else {
|
||||||
}
|
$comment = test_input($_POST["comment"]);
|
||||||
|
}
|
||||||
if (empty($_POST["gender"])) {
|
|
||||||
$genderErr = "Gender is required";
|
if (empty($_POST["gender"])) {
|
||||||
} else {
|
$genderErr = "Gender is required";
|
||||||
$gender = test_input($_POST["gender"]);
|
} else {
|
||||||
}
|
$gender = test_input($_POST["gender"]);
|
||||||
}
|
}
|
||||||
?>
|
}
|
||||||
`
|
?>
|
||||||
|
```
|
||||||
|
|
||||||
### PHP - عرض رسائل الخطأ
|
### PHP - عرض رسائل الخطأ
|
||||||
|
|
||||||
@ -59,29 +60,30 @@ localeTitle: نماذج PHP 5 - الحقول المطلوبة
|
|||||||
|
|
||||||
#### مثال
|
#### مثال
|
||||||
|
|
||||||
`<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
|
```php
|
||||||
|
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
|
||||||
Name: <input type="text" name="name">
|
|
||||||
<span class="error">* <?php echo $nameErr;?></span>
|
Name: <input type="text" name="name">
|
||||||
<br><br>
|
<span class="error">* <?php echo $nameErr;?></span>
|
||||||
E-mail:
|
<br><br>
|
||||||
<input type="text" name="email">
|
E-mail:
|
||||||
<span class="error">* <?php echo $emailErr;?></span>
|
<input type="text" name="email">
|
||||||
<br><br>
|
<span class="error">* <?php echo $emailErr;?></span>
|
||||||
Website:
|
<br><br>
|
||||||
<input type="text" name="website">
|
Website:
|
||||||
<span class="error"><?php echo $websiteErr;?></span>
|
<input type="text" name="website">
|
||||||
<br><br>
|
<span class="error"><?php echo $websiteErr;?></span>
|
||||||
Comment: <textarea name="comment" rows="5" cols="40"></textarea>
|
<br><br>
|
||||||
<br><br>
|
Comment: <textarea name="comment" rows="5" cols="40"></textarea>
|
||||||
Gender:
|
<br><br>
|
||||||
<input type="radio" name="gender" value="female">Female
|
Gender:
|
||||||
<input type="radio" name="gender" value="male">Male
|
<input type="radio" name="gender" value="female">Female
|
||||||
<span class="error">* <?php echo $genderErr;?></span>
|
<input type="radio" name="gender" value="male">Male
|
||||||
<br><br>
|
<span class="error">* <?php echo $genderErr;?></span>
|
||||||
<input type="submit" name="submit" value="Submit">
|
<br><br>
|
||||||
|
<input type="submit" name="submit" value="Submit">
|
||||||
</form>
|
|
||||||
`
|
</form>
|
||||||
|
```
|
||||||
|
|
||||||
الخطوة التالية هي التحقق من صحة بيانات الإدخال ، أي "هل يحتوي حقل الاسم على أحرف و مسافة بيضاء فقط؟" ، و "هل يحتوي حقل البريد الإلكتروني على بناء عنوان بريد إلكتروني صالح؟" ، وإذا تم تعبئته ، " هل يحتوي حقل موقع الويب على عنوان URL صالح؟ ".
|
الخطوة التالية هي التحقق من صحة بيانات الإدخال ، أي "هل يحتوي حقل الاسم على أحرف و مسافة بيضاء فقط؟" ، و "هل يحتوي حقل البريد الإلكتروني على بناء عنوان بريد إلكتروني صالح؟" ، وإذا تم تعبئته ، " هل يحتوي حقل موقع الويب على عنوان URL صالح؟ ".
|
@ -8,11 +8,12 @@ localeTitle: نماذج PHP 5 - التحقق من البريد الإلكترو
|
|||||||
|
|
||||||
يعرض الرمز أدناه طريقة بسيطة للتحقق مما إذا كان حقل الاسم يحتوي فقط على أحرف ومسافة بيضاء. إذا كانت قيمة حقل الاسم غير صالحة ، فقم بتخزين رسالة خطأ:
|
يعرض الرمز أدناه طريقة بسيطة للتحقق مما إذا كان حقل الاسم يحتوي فقط على أحرف ومسافة بيضاء. إذا كانت قيمة حقل الاسم غير صالحة ، فقم بتخزين رسالة خطأ:
|
||||||
|
|
||||||
`$name = test_input($_POST["name"]);
|
```php
|
||||||
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
|
$name = test_input($_POST["name"]);
|
||||||
$nameErr = "Only letters and white space allowed";
|
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
|
||||||
}
|
$nameErr = "Only letters and white space allowed";
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
> **تقوم الدالة preg\_match () بالبحث عن سلسلة للنمط ، وإرجاع true إذا كان النمط موجودًا ، والخطأ بخلاف ذلك.**
|
> **تقوم الدالة preg\_match () بالبحث عن سلسلة للنمط ، وإرجاع true إذا كان النمط موجودًا ، والخطأ بخلاف ذلك.**
|
||||||
|
|
||||||
@ -22,21 +23,23 @@ localeTitle: نماذج PHP 5 - التحقق من البريد الإلكترو
|
|||||||
|
|
||||||
في الرمز أدناه ، إذا لم يكن عنوان البريد الإلكتروني جيدًا ، فقم بتخزين رسالة خطأ:
|
في الرمز أدناه ، إذا لم يكن عنوان البريد الإلكتروني جيدًا ، فقم بتخزين رسالة خطأ:
|
||||||
|
|
||||||
`$email = test_input($_POST["email"]);
|
```php
|
||||||
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
$email = test_input($_POST["email"]);
|
||||||
$emailErr = "Invalid email format";
|
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
||||||
}
|
$emailErr = "Invalid email format";
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### PHP - التحقق من صحة URL
|
### PHP - التحقق من صحة URL
|
||||||
|
|
||||||
يعرض الرمز أدناه طريقة للتحقق مما إذا كان بناء جملة عنوان URL صحيحًا (يسمح هذا التعبير العادي أيضًا بشروط في عنوان URL). إذا كان بناء جملة عنوان URL غير صالح ، فقم بتخزين رسالة خطأ:
|
يعرض الرمز أدناه طريقة للتحقق مما إذا كان بناء جملة عنوان URL صحيحًا (يسمح هذا التعبير العادي أيضًا بشروط في عنوان URL). إذا كان بناء جملة عنوان URL غير صالح ، فقم بتخزين رسالة خطأ:
|
||||||
|
|
||||||
`$website = test_input($_POST["website"]);
|
```php
|
||||||
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
|
$website = test_input($_POST["website"]);
|
||||||
$websiteErr = "Invalid URL";
|
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
|
||||||
}
|
$websiteErr = "Invalid URL";
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### PHP - التحقق من صحة الاسم والبريد الإلكتروني وعنوان URL
|
### PHP - التحقق من صحة الاسم والبريد الإلكتروني وعنوان URL
|
||||||
|
|
||||||
@ -44,53 +47,54 @@ localeTitle: نماذج PHP 5 - التحقق من البريد الإلكترو
|
|||||||
|
|
||||||
#### مثال
|
#### مثال
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
// define variables and set to empty values
|
<?php
|
||||||
$nameErr = $emailErr = $genderErr = $websiteErr = "";
|
// define variables and set to empty values
|
||||||
$name = $email = $gender = $comment = $website = "";
|
$nameErr = $emailErr = $genderErr = $websiteErr = "";
|
||||||
|
$name = $email = $gender = $comment = $website = "";
|
||||||
if ($_SERVER["REQUEST_METHOD"] == "POST") {
|
|
||||||
if (empty($_POST["name"])) {
|
if ($_SERVER["REQUEST_METHOD"] == "POST") {
|
||||||
$nameErr = "Name is required";
|
if (empty($_POST["name"])) {
|
||||||
} else {
|
$nameErr = "Name is required";
|
||||||
$name = test_input($_POST["name"]);
|
} else {
|
||||||
// check if name only contains letters and whitespace
|
$name = test_input($_POST["name"]);
|
||||||
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
|
// check if name only contains letters and whitespace
|
||||||
$nameErr = "Only letters and white space allowed";
|
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
|
||||||
}
|
$nameErr = "Only letters and white space allowed";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (empty($_POST["email"])) {
|
|
||||||
$emailErr = "Email is required";
|
if (empty($_POST["email"])) {
|
||||||
} else {
|
$emailErr = "Email is required";
|
||||||
$email = test_input($_POST["email"]);
|
} else {
|
||||||
// check if e-mail address is well-formed
|
$email = test_input($_POST["email"]);
|
||||||
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
// check if e-mail address is well-formed
|
||||||
$emailErr = "Invalid email format";
|
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
||||||
}
|
$emailErr = "Invalid email format";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (empty($_POST["website"])) {
|
|
||||||
$website = "";
|
if (empty($_POST["website"])) {
|
||||||
} else {
|
$website = "";
|
||||||
$website = test_input($_POST["website"]);
|
} else {
|
||||||
// check if URL address syntax is valid (this regular expression also allows dashes in the URL)
|
$website = test_input($_POST["website"]);
|
||||||
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
|
// check if URL address syntax is valid (this regular expression also allows dashes in the URL)
|
||||||
$websiteErr = "Invalid URL";
|
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
|
||||||
}
|
$websiteErr = "Invalid URL";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (empty($_POST["comment"])) {
|
|
||||||
$comment = "";
|
if (empty($_POST["comment"])) {
|
||||||
} else {
|
$comment = "";
|
||||||
$comment = test_input($_POST["comment"]);
|
} else {
|
||||||
}
|
$comment = test_input($_POST["comment"]);
|
||||||
|
}
|
||||||
if (empty($_POST["gender"])) {
|
|
||||||
$genderErr = "Gender is required";
|
if (empty($_POST["gender"])) {
|
||||||
} else {
|
$genderErr = "Gender is required";
|
||||||
$gender = test_input($_POST["gender"]);
|
} else {
|
||||||
}
|
$gender = test_input($_POST["gender"]);
|
||||||
}
|
}
|
||||||
?>
|
}
|
||||||
`
|
?>
|
||||||
|
```
|
@ -42,8 +42,9 @@ localeTitle: وظائف PHP
|
|||||||
|
|
||||||
سيظهر هذا النتيجة التالية -
|
سيظهر هذا النتيجة التالية -
|
||||||
|
|
||||||
`You are really a nice person, Have a nice time!
|
```
|
||||||
`
|
You are really a nice person, Have a nice time!
|
||||||
|
```
|
||||||
|
|
||||||
### وظائف PHP مع المعلمات
|
### وظائف PHP مع المعلمات
|
||||||
|
|
||||||
@ -72,8 +73,9 @@ localeTitle: وظائف PHP
|
|||||||
|
|
||||||
سيظهر هذا النتيجة التالية -
|
سيظهر هذا النتيجة التالية -
|
||||||
|
|
||||||
`Sum of the two numbers is : 30
|
```
|
||||||
`
|
Sum of the two numbers is : 30
|
||||||
|
```
|
||||||
|
|
||||||
### تمرير الحجج حسب المرجع
|
### تمرير الحجج حسب المرجع
|
||||||
|
|
||||||
@ -115,9 +117,10 @@ localeTitle: وظائف PHP
|
|||||||
|
|
||||||
سيظهر هذا النتيجة التالية -
|
سيظهر هذا النتيجة التالية -
|
||||||
|
|
||||||
`Original Value is 10
|
```
|
||||||
Original Value is 16
|
Original Value is 10
|
||||||
`
|
Original Value is 16
|
||||||
|
```
|
||||||
|
|
||||||
### وظائف PHP العودة القيمة
|
### وظائف PHP العودة القيمة
|
||||||
|
|
||||||
@ -151,8 +154,9 @@ localeTitle: وظائف PHP
|
|||||||
|
|
||||||
سيظهر هذا النتيجة التالية -
|
سيظهر هذا النتيجة التالية -
|
||||||
|
|
||||||
`Returned value from the function : 30
|
```
|
||||||
`
|
Returned value from the function : 30
|
||||||
|
```
|
||||||
|
|
||||||
### ضبط القيم الافتراضية لمعلمات الدالة
|
### ضبط القيم الافتراضية لمعلمات الدالة
|
||||||
|
|
||||||
@ -183,8 +187,9 @@ localeTitle: وظائف PHP
|
|||||||
|
|
||||||
هذا سينتج النتيجة التالية -
|
هذا سينتج النتيجة التالية -
|
||||||
|
|
||||||
`This is test
|
```
|
||||||
`
|
This is test
|
||||||
|
```
|
||||||
|
|
||||||
### المكالمات الديناميكية
|
### المكالمات الديناميكية
|
||||||
|
|
||||||
@ -213,5 +218,6 @@ localeTitle: وظائف PHP
|
|||||||
|
|
||||||
سيظهر هذا النتيجة التالية -
|
سيظهر هذا النتيجة التالية -
|
||||||
|
|
||||||
`Hello
|
```
|
||||||
`
|
Hello
|
||||||
|
```
|
@ -14,8 +14,9 @@ localeTitle: تثبيت PHP
|
|||||||
|
|
||||||
اكتب العنوان التالي في مربع عنوان المتصفح الخاص بك.
|
اكتب العنوان التالي في مربع عنوان المتصفح الخاص بك.
|
||||||
|
|
||||||
`http://127.0.0.1/info.php
|
```shell
|
||||||
`
|
http://127.0.0.1/info.php
|
||||||
|
```
|
||||||
|
|
||||||
إذا كان هذا يعرض صفحة تعرض معلومات تثبيت PHP الخاصة بك ، فهذا يعني أنه لديك PHP و Webserver مثبت بشكل صحيح.
|
إذا كان هذا يعرض صفحة تعرض معلومات تثبيت PHP الخاصة بك ، فهذا يعني أنه لديك PHP و Webserver مثبت بشكل صحيح.
|
||||||
|
|
||||||
|
@ -25,9 +25,10 @@ $ string _1 = "هذه سلسلة في علامات تنصيص مزدوجة"؛ $
|
|||||||
|
|
||||||
سيؤدي ذلك إلى النتيجة التالية -
|
سيؤدي ذلك إلى النتيجة التالية -
|
||||||
|
|
||||||
`My $variable will not print!\n
|
```
|
||||||
My name will print
|
My $variable will not print!\n
|
||||||
`
|
My name will print
|
||||||
|
```
|
||||||
|
|
||||||
لا توجد حدود صناعية على طول السلسلة - داخل حدود الذاكرة المتوفرة ، يجب أن تكون قادرًا على جعل سلاسل طويلة عشوائية.
|
لا توجد حدود صناعية على طول السلسلة - داخل حدود الذاكرة المتوفرة ، يجب أن تكون قادرًا على جعل سلاسل طويلة عشوائية.
|
||||||
|
|
||||||
@ -55,8 +56,9 @@ $ string _1 = "هذه سلسلة في علامات تنصيص مزدوجة"؛ $
|
|||||||
|
|
||||||
سيؤدي ذلك إلى النتيجة التالية -
|
سيؤدي ذلك إلى النتيجة التالية -
|
||||||
|
|
||||||
`Hello World 1234
|
```
|
||||||
`
|
Hello World 1234
|
||||||
|
```
|
||||||
|
|
||||||
إذا نظرنا إلى الكود أعلاه سترى أننا استخدمنا عامل التشغيل السلسلتي مرتين. هذا لأنه كان علينا إدخال سلسلة ثالثة.
|
إذا نظرنا إلى الكود أعلاه سترى أننا استخدمنا عامل التشغيل السلسلتي مرتين. هذا لأنه كان علينا إدخال سلسلة ثالثة.
|
||||||
|
|
||||||
@ -68,15 +70,17 @@ $ string _1 = "هذه سلسلة في علامات تنصيص مزدوجة"؛ $
|
|||||||
|
|
||||||
دعونا نعثر على طول السلسلة "Hello world!":
|
دعونا نعثر على طول السلسلة "Hello world!":
|
||||||
|
|
||||||
`<?php
|
```
|
||||||
echo strlen("Hello world!");
|
<?php
|
||||||
?>
|
echo strlen("Hello world!");
|
||||||
`
|
?>
|
||||||
|
```
|
||||||
|
|
||||||
سيؤدي ذلك إلى النتيجة التالية -
|
سيؤدي ذلك إلى النتيجة التالية -
|
||||||
|
|
||||||
`12
|
```
|
||||||
`
|
12
|
||||||
|
```
|
||||||
|
|
||||||
غالباً ما يتم استخدام طول سلسلة في حلقات أو دالات أخرى ، عندما يكون من المهم معرفة متى تنتهي السلسلة. (أي في حلقة ، نود إيقاف الحلقة بعد الحرف الأخير في السلسلة)
|
غالباً ما يتم استخدام طول سلسلة في حلقات أو دالات أخرى ، عندما يكون من المهم معرفة متى تنتهي السلسلة. (أي في حلقة ، نود إيقاف الحلقة بعد الحرف الأخير في السلسلة)
|
||||||
|
|
||||||
@ -88,10 +92,11 @@ $ string _1 = "هذه سلسلة في علامات تنصيص مزدوجة"؛ $
|
|||||||
|
|
||||||
دعونا نرى ما إذا كان بإمكاننا العثور على سلسلة "العالم" في سلسلتنا -
|
دعونا نرى ما إذا كان بإمكاننا العثور على سلسلة "العالم" في سلسلتنا -
|
||||||
|
|
||||||
`<?php
|
```
|
||||||
echo strpos("Hello world!","world");
|
<?php
|
||||||
?>
|
echo strpos("Hello world!","world");
|
||||||
`
|
?>
|
||||||
|
```
|
||||||
|
|
||||||
سيؤدي ذلك إلى النتيجة التالية -
|
سيؤدي ذلك إلى النتيجة التالية -
|
||||||
|
|
||||||
|
@ -27,39 +27,41 @@ localeTitle: تبديل PHP
|
|||||||
|
|
||||||
شكل توضيحي لبيان `switch` مع مثال
|
شكل توضيحي لبيان `switch` مع مثال
|
||||||
|
|
||||||
`<?php
|
```
|
||||||
|
<?php
|
||||||
$i = 1
|
|
||||||
switch ($i) {
|
$i = 1
|
||||||
case 0:
|
switch ($i) {
|
||||||
echo "i equals 0";
|
case 0:
|
||||||
break;
|
echo "i equals 0";
|
||||||
case 1:
|
break;
|
||||||
echo "i equals 1";
|
case 1:
|
||||||
break;
|
echo "i equals 1";
|
||||||
case 2:
|
break;
|
||||||
echo "i equals 2";
|
case 2:
|
||||||
break;
|
echo "i equals 2";
|
||||||
}
|
break;
|
||||||
|
}
|
||||||
?>
|
|
||||||
`
|
?>
|
||||||
|
```
|
||||||
|
|
||||||
يمكن أيضًا استخدام عبارة `switch` دون بيان `break` . في هذه الحالة ، سيتم تنفيذ العبارات بعد الحالات المتطابقة. أدناه هو استخدام بيان `switch` دون بيان `break` .
|
يمكن أيضًا استخدام عبارة `switch` دون بيان `break` . في هذه الحالة ، سيتم تنفيذ العبارات بعد الحالات المتطابقة. أدناه هو استخدام بيان `switch` دون بيان `break` .
|
||||||
|
|
||||||
`<?php
|
```
|
||||||
switch ($i) {
|
<?php
|
||||||
case 0:
|
switch ($i) {
|
||||||
echo "i equals 0";
|
case 0:
|
||||||
case 1:
|
echo "i equals 0";
|
||||||
echo "i equals 1";
|
case 1:
|
||||||
case 2:
|
echo "i equals 1";
|
||||||
echo "i equals 2";
|
case 2:
|
||||||
}
|
echo "i equals 2";
|
||||||
?>
|
}
|
||||||
|
?>
|
||||||
/*output --> i equals 0i equals 1i equals 2 */
|
|
||||||
`
|
/*output --> i equals 0i equals 1i equals 2 */
|
||||||
|
```
|
||||||
|
|
||||||
#### معلومات اكثر:
|
#### معلومات اكثر:
|
||||||
|
|
||||||
|
@ -16,19 +16,20 @@ localeTitle: بناء php
|
|||||||
|
|
||||||
#### عينة التعليمات البرمجية
|
#### عينة التعليمات البرمجية
|
||||||
|
|
||||||
`<!DOCTYPE html>
|
```
|
||||||
<html>
|
<!DOCTYPE html>
|
||||||
<body>
|
<html>
|
||||||
|
<body>
|
||||||
<h1>My first PHP page</h1>
|
|
||||||
|
<h1>My first PHP page</h1>
|
||||||
<?php
|
|
||||||
echo "Hello World!";
|
<?php
|
||||||
?>
|
echo "Hello World!";
|
||||||
|
?>
|
||||||
</body>
|
|
||||||
</html>
|
</body>
|
||||||
`
|
</html>
|
||||||
|
```
|
||||||
|
|
||||||
##### ملاحظة: تنتهي عبارات PHP بفاصلة منقوطة `;`
|
##### ملاحظة: تنتهي عبارات PHP بفاصلة منقوطة `;`
|
||||||
|
|
||||||
@ -36,46 +37,50 @@ localeTitle: بناء php
|
|||||||
|
|
||||||
نعلن عن وجود متغيرات في PHP عن طريق إضافة علامة `$` قبلها.
|
نعلن عن وجود متغيرات في PHP عن طريق إضافة علامة `$` قبلها.
|
||||||
|
|
||||||
`<?php
|
```
|
||||||
$x = 5;
|
<?php
|
||||||
echo $x;
|
$x = 5;
|
||||||
?>
|
echo $x;
|
||||||
`
|
?>
|
||||||
|
```
|
||||||
|
|
||||||
### تعليقات في PHP
|
### تعليقات في PHP
|
||||||
|
|
||||||
لكتابة تعليق سطر واحد في PHP ، نضع hashtag `#` أو بوضع `//` قبل التعليق.
|
لكتابة تعليق سطر واحد في PHP ، نضع hashtag `#` أو بوضع `//` قبل التعليق.
|
||||||
|
|
||||||
`<?php
|
```
|
||||||
# This is a single line comment
|
<?php
|
||||||
// This is also a single line comment
|
# This is a single line comment
|
||||||
?>
|
// This is also a single line comment
|
||||||
`
|
?>
|
||||||
|
```
|
||||||
|
|
||||||
لكتابة تعليق خط مزدوج ، نبدأ التعليق مع `/*` وننتهي بـ `*/` .
|
لكتابة تعليق خط مزدوج ، نبدأ التعليق مع `/*` وننتهي بـ `*/` .
|
||||||
|
|
||||||
`<?php
|
```
|
||||||
/* This is a
|
<?php
|
||||||
Double line comment. */
|
/* This is a
|
||||||
?>
|
Double line comment. */
|
||||||
`
|
?>
|
||||||
|
```
|
||||||
|
|
||||||
يمكننا أيضًا التعليق على بعض أجزاء سطر الشفرة.
|
يمكننا أيضًا التعليق على بعض أجزاء سطر الشفرة.
|
||||||
|
|
||||||
#### عينة الكود
|
#### عينة الكود
|
||||||
|
|
||||||
`<!DOCTYPE html>
|
```
|
||||||
<html>
|
<!DOCTYPE html>
|
||||||
<body>
|
<html>
|
||||||
|
<body>
|
||||||
<?php
|
|
||||||
// You can also use comments to leave out parts of a code line
|
<?php
|
||||||
$x = 5 /* + 15 */ + 5;
|
// You can also use comments to leave out parts of a code line
|
||||||
echo $x;
|
$x = 5 /* + 15 */ + 5;
|
||||||
?>
|
echo $x;
|
||||||
|
?>
|
||||||
</body>
|
|
||||||
</html>
|
</body>
|
||||||
`
|
</html>
|
||||||
|
```
|
||||||
|
|
||||||
يمكنك معرفة المزيد عن هذا في [دليل PHP](http://php.net/manual/en/)
|
يمكنك معرفة المزيد عن هذا في [دليل PHP](http://php.net/manual/en/)
|
@ -8,12 +8,13 @@ PHP يسمح أيضا لعلامة مفتوحة قصيرة `<?` (وهو أمر
|
|||||||
|
|
||||||
إذا كان الملف عبارة عن كود PHP خالص ، فمن الأفضل حذف علامة إغلاق PHP في نهاية الملف. يؤدي ذلك إلى منع المساحات البيضاء أو الخطوط الجديدة التي تتم إضافتها بعد علامة إغلاق PHP ، والتي قد تتسبب في حدوث تأثيرات غير مرغوب فيها لأن PHP سيبدأ التخزين المؤقت للإخراج عندما لا يكون هناك نية من المبرمج لإرسال أي إخراج عند هذه النقطة في البرنامج النصي.
|
إذا كان الملف عبارة عن كود PHP خالص ، فمن الأفضل حذف علامة إغلاق PHP في نهاية الملف. يؤدي ذلك إلى منع المساحات البيضاء أو الخطوط الجديدة التي تتم إضافتها بعد علامة إغلاق PHP ، والتي قد تتسبب في حدوث تأثيرات غير مرغوب فيها لأن PHP سيبدأ التخزين المؤقت للإخراج عندما لا يكون هناك نية من المبرمج لإرسال أي إخراج عند هذه النقطة في البرنامج النصي.
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
echo "Hello world";
|
<?php
|
||||||
|
echo "Hello world";
|
||||||
// ... more code
|
|
||||||
|
// ... more code
|
||||||
echo "Last statement";
|
|
||||||
|
echo "Last statement";
|
||||||
// the script ends here with no PHP closing tag
|
|
||||||
`
|
// the script ends here with no PHP closing tag
|
||||||
|
```
|
@ -6,13 +6,14 @@ localeTitle: متغيرات PHP
|
|||||||
|
|
||||||
المتغيرات هي "حاويات" لتخزين المعلومات. يتم الإعلان عن المتغيرات باستخدام علامة الدولار ($) متبوعة مباشرة باسم المتغير. على سبيل المثال ، سيعمل قالب التعليمة البرمجية أدناه على إنشاء متغير يسمى `myVariable` وتعيين سلسلة `Hello World` إليه.
|
المتغيرات هي "حاويات" لتخزين المعلومات. يتم الإعلان عن المتغيرات باستخدام علامة الدولار ($) متبوعة مباشرة باسم المتغير. على سبيل المثال ، سيعمل قالب التعليمة البرمجية أدناه على إنشاء متغير يسمى `myVariable` وتعيين سلسلة `Hello World` إليه.
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
$myVariable = "Hello World";
|
<?php
|
||||||
$x = 5;
|
$myVariable = "Hello World";
|
||||||
$y = 10.5;
|
$x = 5;
|
||||||
$z = '42';
|
$y = 10.5;
|
||||||
?>
|
$z = '42';
|
||||||
`
|
?>
|
||||||
|
```
|
||||||
|
|
||||||
بعد تنفيذ البيانات أعلاه، المتغير `$myVariable` سيعقد سلسلة مع قيمة أهلا بالعالم! المتغير `$x` سيعقدون صحيح بقيمة 5 و المتغير `$y` سيعقد تعويم بقيمة من 10.5 ، وسيحتوي المتغير `$z` على سلسلة بقيمة 42.
|
بعد تنفيذ البيانات أعلاه، المتغير `$myVariable` سيعقد سلسلة مع قيمة أهلا بالعالم! المتغير `$x` سيعقدون صحيح بقيمة 5 و المتغير `$y` سيعقد تعويم بقيمة من 10.5 ، وسيحتوي المتغير `$z` على سلسلة بقيمة 42.
|
||||||
|
|
||||||
|
@ -48,12 +48,13 @@ _مشاركة وفرض الكود مع تعدد الأشكال باستخدام
|
|||||||
|
|
||||||
نحتاج إلى تحديد الاسم والعمر والطول لتكوين هذه الفئة وفقًا لما يتطلبه المنشئ.
|
نحتاج إلى تحديد الاسم والعمر والطول لتكوين هذه الفئة وفقًا لما يتطلبه المنشئ.
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
$jack = new Man('Jack', '26', '5 Feet 6 Inches');
|
<?php
|
||||||
|
$jack = new Man('Jack', '26', '5 Feet 6 Inches');
|
||||||
echo sprintf('%s - %s - %s', $jack->name, $jack->age, $jack->height);
|
|
||||||
// => Jack - 26 - 5 Feet 6 Inches
|
echo sprintf('%s - %s - %s', $jack->name, $jack->age, $jack->height);
|
||||||
`
|
// => Jack - 26 - 5 Feet 6 Inches
|
||||||
|
```
|
||||||
|
|
||||||
الآن ، دعنا نقول أننا نريد إضافة طريقة جديدة لهذه الفئة تسمى isActive.
|
الآن ، دعنا نقول أننا نريد إضافة طريقة جديدة لهذه الفئة تسمى isActive.
|
||||||
|
|
||||||
@ -99,21 +100,22 @@ _مشاركة وفرض الكود مع تعدد الأشكال باستخدام
|
|||||||
|
|
||||||
يمكننا الحصول على if..sese..else مثل هذه العبارات:
|
يمكننا الحصول على if..sese..else مثل هذه العبارات:
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
|
<?php
|
||||||
public function isActive()
|
|
||||||
{
|
public function isActive()
|
||||||
if ($this->active == 1) {
|
{
|
||||||
return "I am an idle man.";
|
if ($this->active == 1) {
|
||||||
} elseif ($this->active == 2) {
|
return "I am an idle man.";
|
||||||
return "I am a lightly active man.";
|
} elseif ($this->active == 2) {
|
||||||
} elseif ($this->active == 3) {
|
return "I am a lightly active man.";
|
||||||
return "I am a moderately active man.";
|
} elseif ($this->active == 3) {
|
||||||
} else {
|
return "I am a moderately active man.";
|
||||||
return "I am a very active man.";
|
} else {
|
||||||
}
|
return "I am a very active man.";
|
||||||
}
|
}
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
الآن ، لنأخذ هذه خطوة أخرى.
|
الآن ، لنأخذ هذه خطوة أخرى.
|
||||||
|
|
||||||
@ -133,55 +135,60 @@ _مشاركة وفرض الكود مع تعدد الأشكال باستخدام
|
|||||||
|
|
||||||
# 1: تعريف الصف كملخص.
|
# 1: تعريف الصف كملخص.
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
abstract class Man
|
<?php
|
||||||
{
|
abstract class Man
|
||||||
.....
|
{
|
||||||
.....
|
.....
|
||||||
}
|
.....
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
# 2: إنشاء طريقة مجردة للطريقة التي تريد فرضها داخل الطبقة المجردة.
|
# 2: إنشاء طريقة مجردة للطريقة التي تريد فرضها داخل الطبقة المجردة.
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
abstract class Man
|
<?php
|
||||||
{
|
abstract class Man
|
||||||
.....
|
{
|
||||||
.....
|
.....
|
||||||
abstract public function isActive();
|
.....
|
||||||
}
|
abstract public function isActive();
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
# 3: إنشاء فئة تابعة لتوسيع الفئة المجردة.
|
# 3: إنشاء فئة تابعة لتوسيع الفئة المجردة.
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
|
<?php
|
||||||
class AthleticMan extends Man
|
|
||||||
{
|
class AthleticMan extends Man
|
||||||
.....
|
{
|
||||||
.....
|
.....
|
||||||
}
|
.....
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
# 4: تنفيذ الطريقة المجردة داخل فئة الطفل.
|
# 4: تنفيذ الطريقة المجردة داخل فئة الطفل.
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
class AthleticMan extends Man
|
<?php
|
||||||
{
|
class AthleticMan extends Man
|
||||||
public function isActive()
|
{
|
||||||
{
|
public function isActive()
|
||||||
return "I am a very active athlete.";
|
{
|
||||||
}
|
return "I am a very active athlete.";
|
||||||
}
|
}
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
# 5: تحفيظ فئة الطفل (وليس الطبقة المجردة).
|
# 5: تحفيظ فئة الطفل (وليس الطبقة المجردة).
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
$jack = new AthleticMan('Jack', '26', '5 feet 6 inches');
|
<?php
|
||||||
echo $jack->isActive();
|
$jack = new AthleticMan('Jack', '26', '5 feet 6 inches');
|
||||||
// => I am a very active athlete.
|
echo $jack->isActive();
|
||||||
`
|
// => I am a very active athlete.
|
||||||
|
```
|
||||||
|
|
||||||
كامل تعريف فئة الملخص ورمز التنفيذ:
|
كامل تعريف فئة الملخص ورمز التنفيذ:
|
||||||
|
|
||||||
@ -237,11 +244,12 @@ _مشاركة وفرض الكود مع تعدد الأشكال باستخدام
|
|||||||
|
|
||||||
الآن لا يمكن إنشاء مثيل لطبقة `Man` مباشرة لإنشاء كائن.
|
الآن لا يمكن إنشاء مثيل لطبقة `Man` مباشرة لإنشاء كائن.
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
$ted = new Man('Ted', '30', '6 feet');
|
<?php
|
||||||
echo $ted->isActive();
|
$ted = new Man('Ted', '30', '6 feet');
|
||||||
// => Fatal error: Uncaught Error: Cannot instantiate abstract class Man
|
echo $ted->isActive();
|
||||||
`
|
// => Fatal error: Uncaught Error: Cannot instantiate abstract class Man
|
||||||
|
```
|
||||||
|
|
||||||
أيضا ، كل فئة طفل من الطبقة المجردة (درجة `Man` ) تحتاج إلى تنفيذ جميع الأساليب المجردة. سوف يؤدي عدم تنفيذ مثل هذا إلى خطأ فادح.
|
أيضا ، كل فئة طفل من الطبقة المجردة (درجة `Man` ) تحتاج إلى تنفيذ جميع الأساليب المجردة. سوف يؤدي عدم تنفيذ مثل هذا إلى خطأ فادح.
|
||||||
|
|
||||||
@ -325,11 +333,12 @@ _مشاركة وفرض الكود مع تعدد الأشكال باستخدام
|
|||||||
|
|
||||||
# 3: تحفيز فئة التنفيذ (AthleticMan)
|
# 3: تحفيز فئة التنفيذ (AthleticMan)
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
$jack = new AthleticMan('Jack', '26', '5 feet 6 inches');
|
<?php
|
||||||
echo $jack->isActive();
|
$jack = new AthleticMan('Jack', '26', '5 feet 6 inches');
|
||||||
// => I am a very active athlete.
|
echo $jack->isActive();
|
||||||
`
|
// => I am a very active athlete.
|
||||||
|
```
|
||||||
|
|
||||||
باستخدام الواجهات ، يجب أن تضع في اعتبارك ما يلي:
|
باستخدام الواجهات ، يجب أن تضع في اعتبارك ما يلي:
|
||||||
|
|
||||||
|
@ -27,24 +27,25 @@ localeTitle: جلسات PHP
|
|||||||
|
|
||||||
**مثال:**
|
**مثال:**
|
||||||
|
|
||||||
`<?php
|
```
|
||||||
// Start the session
|
<?php
|
||||||
session_start();
|
// Start the session
|
||||||
?>
|
session_start();
|
||||||
<!DOCTYPE html>
|
?>
|
||||||
<html>
|
<!DOCTYPE html>
|
||||||
<body>
|
<html>
|
||||||
|
<body>
|
||||||
<?php
|
|
||||||
// Set session variables
|
<?php
|
||||||
$_SESSION["favcolor"] = "blue";
|
// Set session variables
|
||||||
$_SESSION["favanimal"] = "dog";
|
$_SESSION["favcolor"] = "blue";
|
||||||
echo "Session variables are set.";
|
$_SESSION["favanimal"] = "dog";
|
||||||
?>
|
echo "Session variables are set.";
|
||||||
|
?>
|
||||||
</body>
|
|
||||||
</html>
|
</body>
|
||||||
`
|
</html>
|
||||||
|
```
|
||||||
|
|
||||||
**ملاحظة:** يجب أن تكون الدالة session\_start () **أول شيء** في المستند. **قبل** أي علامات HTML.
|
**ملاحظة:** يجب أن تكون الدالة session\_start () **أول شيء** في المستند. **قبل** أي علامات HTML.
|
||||||
|
|
||||||
@ -59,22 +60,23 @@ localeTitle: جلسات PHP
|
|||||||
|
|
||||||
**مثال:**
|
**مثال:**
|
||||||
|
|
||||||
`<?php
|
```
|
||||||
session_start();
|
<?php
|
||||||
?>
|
session_start();
|
||||||
<!DOCTYPE html>
|
?>
|
||||||
<html>
|
<!DOCTYPE html>
|
||||||
<body>
|
<html>
|
||||||
|
<body>
|
||||||
<?php
|
|
||||||
// Echo session variables that were set on previous page
|
<?php
|
||||||
echo "Favorite color is " . $_SESSION["favcolor"] . ".<br>";
|
// Echo session variables that were set on previous page
|
||||||
echo "Favorite animal is " . $_SESSION["favanimal"] . ".";
|
echo "Favorite color is " . $_SESSION["favcolor"] . ".<br>";
|
||||||
?>
|
echo "Favorite animal is " . $_SESSION["favanimal"] . ".";
|
||||||
|
?>
|
||||||
</body>
|
|
||||||
</html>
|
</body>
|
||||||
`
|
</html>
|
||||||
|
```
|
||||||
|
|
||||||
انتاج:
|
انتاج:
|
||||||
اللون المفضل باللون الأزرق.
|
اللون المفضل باللون الأزرق.
|
||||||
@ -82,10 +84,11 @@ localeTitle: جلسات PHP
|
|||||||
|
|
||||||
هناك طريقة أخرى لإظهار كافة قيم متغير جلسة العمل لجلسة مستخدم هي تشغيل التعليمة البرمجية التالية:
|
هناك طريقة أخرى لإظهار كافة قيم متغير جلسة العمل لجلسة مستخدم هي تشغيل التعليمة البرمجية التالية:
|
||||||
|
|
||||||
`<?php
|
```
|
||||||
print_r($_SESSION);
|
<?php
|
||||||
?>
|
print_r($_SESSION);
|
||||||
`
|
?>
|
||||||
|
```
|
||||||
|
|
||||||
### كيف يعمل؟
|
### كيف يعمل؟
|
||||||
|
|
||||||
@ -99,22 +102,23 @@ localeTitle: جلسات PHP
|
|||||||
|
|
||||||
**مثال:**
|
**مثال:**
|
||||||
|
|
||||||
`<?php
|
```
|
||||||
session_start();
|
<?php
|
||||||
?>
|
session_start();
|
||||||
<!DOCTYPE html>
|
?>
|
||||||
<html>
|
<!DOCTYPE html>
|
||||||
<body>
|
<html>
|
||||||
|
<body>
|
||||||
<?php
|
|
||||||
// to change a session variable, just overwrite it
|
<?php
|
||||||
$_SESSION["favcolor"] = "pink";
|
// to change a session variable, just overwrite it
|
||||||
print_r($_SESSION);
|
$_SESSION["favcolor"] = "pink";
|
||||||
?>
|
print_r($_SESSION);
|
||||||
|
?>
|
||||||
</body>
|
|
||||||
</html>
|
</body>
|
||||||
`
|
</html>
|
||||||
|
```
|
||||||
|
|
||||||
## تدمير دورة PHP
|
## تدمير دورة PHP
|
||||||
|
|
||||||
@ -122,21 +126,22 @@ localeTitle: جلسات PHP
|
|||||||
|
|
||||||
**مثال:**
|
**مثال:**
|
||||||
|
|
||||||
`<?php
|
```
|
||||||
session_start();
|
<?php
|
||||||
?>
|
session_start();
|
||||||
<!DOCTYPE html>
|
?>
|
||||||
<html>
|
<!DOCTYPE html>
|
||||||
<body>
|
<html>
|
||||||
|
<body>
|
||||||
<?php
|
|
||||||
// remove all session variables
|
<?php
|
||||||
session_unset();
|
// remove all session variables
|
||||||
|
session_unset();
|
||||||
// destroy the session
|
|
||||||
session_destroy();
|
// destroy the session
|
||||||
?>
|
session_destroy();
|
||||||
|
?>
|
||||||
</body>
|
|
||||||
</html>
|
</body>
|
||||||
`
|
</html>
|
||||||
|
```
|
@ -14,15 +14,16 @@ Cross Site Request Forgery هي نقطة ضعف في التطبيق بسبب ع
|
|||||||
|
|
||||||
للدفاع ضد هجوم موقع التزوير طلب التزوير ، يجب عليك التحقق من رمز مميز تم تغييره بشكل منتظم. `/admin/deletecomment.php?id=123` عنوان url `/admin/deletecomment.php?id=123` إلى `/admin/deletecomment.php?id=123&csrf-token=random-per-user-unique-string-here` .
|
للدفاع ضد هجوم موقع التزوير طلب التزوير ، يجب عليك التحقق من رمز مميز تم تغييره بشكل منتظم. `/admin/deletecomment.php?id=123` عنوان url `/admin/deletecomment.php?id=123` إلى `/admin/deletecomment.php?id=123&csrf-token=random-per-user-unique-string-here` .
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
// Checking a request's CSRF Token (if true the comment is deleted, if false the comment remains.)
|
<?php
|
||||||
session_start();
|
// Checking a request's CSRF Token (if true the comment is deleted, if false the comment remains.)
|
||||||
if ($_GET['csrf-token'] == $_SESSION['csrf-token']){
|
session_start();
|
||||||
return true;
|
if ($_GET['csrf-token'] == $_SESSION['csrf-token']){
|
||||||
} else {
|
return true;
|
||||||
return false;
|
} else {
|
||||||
}
|
return false;
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
**نصائح:**
|
**نصائح:**
|
||||||
|
|
||||||
@ -34,19 +35,21 @@ Cross Site Request Forgery هي نقطة ضعف في التطبيق بسبب ع
|
|||||||
|
|
||||||
عند تحديد CSRF Token ، من المهم أن يكون من المستحيل تخمين المفتاح. يمكن أن تؤدي وظائف OpenSSL في PHP إلى إنشاء مفتاح عشوائي لك وتخزينه كمتغير جلسة عمل.
|
عند تحديد CSRF Token ، من المهم أن يكون من المستحيل تخمين المفتاح. يمكن أن تؤدي وظائف OpenSSL في PHP إلى إنشاء مفتاح عشوائي لك وتخزينه كمتغير جلسة عمل.
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
session_start();
|
<?php
|
||||||
$_SESSION['csrf-token'] = bin2hex(openssl_random_pseudo_bytes(16));
|
session_start();
|
||||||
`
|
$_SESSION['csrf-token'] = bin2hex(openssl_random_pseudo_bytes(16));
|
||||||
|
```
|
||||||
|
|
||||||
#### استخدام رمز CSRF لإكمال الطلبات الشرعية
|
#### استخدام رمز CSRF لإكمال الطلبات الشرعية
|
||||||
|
|
||||||
يمكنك تضمين متغير الجلسة الذي قمت بحفظه مسبقًا مع رمز CSRF الخاص بك في عنوان URL تأكد من أنه مسموح للمسؤول الشرعي بحذف التعليقات. بدون الرمز الصحيح سيتم حظر الطلب.
|
يمكنك تضمين متغير الجلسة الذي قمت بحفظه مسبقًا مع رمز CSRF الخاص بك في عنوان URL تأكد من أنه مسموح للمسؤول الشرعي بحذف التعليقات. بدون الرمز الصحيح سيتم حظر الطلب.
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
session_start();
|
<?php
|
||||||
echo '<a href="/admin/?id=123&csrf-token='.$_SESSION['csrf-token'].'">Delete Comment</a>'; // Only the logged in user has access to the CSRF Token - the token isn't accessible to the attacker preventing their attack from being successful.
|
session_start();
|
||||||
`
|
echo '<a href="/admin/?id=123&csrf-token='.$_SESSION['csrf-token'].'">Delete Comment</a>'; // Only the logged in user has access to the CSRF Token - the token isn't accessible to the attacker preventing their attack from being successful.
|
||||||
|
```
|
||||||
|
|
||||||
#### معلومات اكثر:
|
#### معلومات اكثر:
|
||||||
|
|
||||||
|
@ -10,10 +10,11 @@ Cross Site Scripting هو نوع من نقاط الضعف في تطبيق الو
|
|||||||
|
|
||||||
تسمح المدونة للمستخدمين بوضع تعليقاتهم باستخدام علامات HTML ، إلا أن النص البرمجي الذي يمد المدونة لا يزيل علامات `<script>` تسمح لأي مستخدم بتشغيل javascript على الصفحة. يمكن للمهاجم استخدام هذه الميزة لصالح تشغيل javascript ضار في المستعرض. يمكن أن تصيب المستخدمين بالبرامج الضارة ، وتسرق ملفات تعريف الارتباط للجلسة ، والمزيد.
|
تسمح المدونة للمستخدمين بوضع تعليقاتهم باستخدام علامات HTML ، إلا أن النص البرمجي الذي يمد المدونة لا يزيل علامات `<script>` تسمح لأي مستخدم بتشغيل javascript على الصفحة. يمكن للمهاجم استخدام هذه الميزة لصالح تشغيل javascript ضار في المستعرض. يمكن أن تصيب المستخدمين بالبرامج الضارة ، وتسرق ملفات تعريف الارتباط للجلسة ، والمزيد.
|
||||||
|
|
||||||
`<script>
|
```HTML
|
||||||
alert('Cross Site Scripting!');
|
<script>
|
||||||
</script>
|
alert('Cross Site Scripting!');
|
||||||
`
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
### الدفاع عن موقع الويب الخاص بك من هجمات البرمجة عبر الموقع في PHP
|
### الدفاع عن موقع الويب الخاص بك من هجمات البرمجة عبر الموقع في PHP
|
||||||
|
|
||||||
@ -21,28 +22,31 @@ Cross Site Scripting هو نوع من نقاط الضعف في تطبيق الو
|
|||||||
|
|
||||||
`htmlspecialchars($string)` وظيفة `htmlspecialchars($string)` منع سلسلة HTML من العرض كملف HTML وعرضها كنص عادي لمتصفح الويب. **htmlspecialchars () مثال التعليمات البرمجية**
|
`htmlspecialchars($string)` وظيفة `htmlspecialchars($string)` منع سلسلة HTML من العرض كملف HTML وعرضها كنص عادي لمتصفح الويب. **htmlspecialchars () مثال التعليمات البرمجية**
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
$usercomment = "<string>alert('Cross Site Scripting!');</script>";
|
<?php
|
||||||
echo htmlspecialchars($usercomment);
|
$usercomment = "<string>alert('Cross Site Scripting!');</script>";
|
||||||
`
|
echo htmlspecialchars($usercomment);
|
||||||
|
```
|
||||||
|
|
||||||
الطريقة الأخرى هي `strip_tags($string, $allowedtags)` التي تزيل كل علامات HTML باستثناء علامات HTML التي قمت بإضافتها إلى القائمة البيضاء. من المهم أن نلاحظ أنه مع وظيفة `strip_tags()` يجب أن تكون أكثر حذراً ، هذه الوظيفة لا تمنع المستخدم من تضمين javascript كحلقة ارتباط ، سيكون عليك تطهير ذلك بمفردنا.
|
الطريقة الأخرى هي `strip_tags($string, $allowedtags)` التي تزيل كل علامات HTML باستثناء علامات HTML التي قمت بإضافتها إلى القائمة البيضاء. من المهم أن نلاحظ أنه مع وظيفة `strip_tags()` يجب أن تكون أكثر حذراً ، هذه الوظيفة لا تمنع المستخدم من تضمين javascript كحلقة ارتباط ، سيكون عليك تطهير ذلك بمفردنا.
|
||||||
|
|
||||||
**code\_tags () مثال التعليمات البرمجية**
|
**code\_tags () مثال التعليمات البرمجية**
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
$usercomment = "<string>alert('Cross Site Scripting!');</script>";
|
<?php
|
||||||
$allowedtags = "<p><a><h1><h2><h3>";
|
$usercomment = "<string>alert('Cross Site Scripting!');</script>";
|
||||||
echo strip_tags($usercomment, $allowedtags);
|
$allowedtags = "<p><a><h1><h2><h3>";
|
||||||
`
|
echo strip_tags($usercomment, $allowedtags);
|
||||||
|
```
|
||||||
|
|
||||||
**ضبط رأس الحماية X-XSS:**
|
**ضبط رأس الحماية X-XSS:**
|
||||||
|
|
||||||
في PHP ، يمكنك إرسال `X-XSS-Protection` Header الذي سيخبر المتصفحات بالتحقق من هجوم Scripting عبر موقع ويب منع الصفحة من التحميل. هذا لا يمنع جميع الهجمات النصية عبر الموقع فقط تنعكس منها ويجب استخدامها في تركيبة مع أساليب أخرى.
|
في PHP ، يمكنك إرسال `X-XSS-Protection` Header الذي سيخبر المتصفحات بالتحقق من هجوم Scripting عبر موقع ويب منع الصفحة من التحميل. هذا لا يمنع جميع الهجمات النصية عبر الموقع فقط تنعكس منها ويجب استخدامها في تركيبة مع أساليب أخرى.
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
header("X-XSS-Protection: 1; mode=block");
|
<?php
|
||||||
`
|
header("X-XSS-Protection: 1; mode=block");
|
||||||
|
```
|
||||||
|
|
||||||
**كتابة وظيفة التعقيم الخاصة بك** خيار آخر ، إذا كنت ترغب في مزيد من التحكم في كيفية عمل التطهير ، هو كتابة وظيفة تعقيم HTML الخاصة بك ، وهذا لا يوصى به للمبتدئين PHP كخطأ من شأنه أن يجعل موقع الويب الخاص بك عرضة.
|
**كتابة وظيفة التعقيم الخاصة بك** خيار آخر ، إذا كنت ترغب في مزيد من التحكم في كيفية عمل التطهير ، هو كتابة وظيفة تعقيم HTML الخاصة بك ، وهذا لا يوصى به للمبتدئين PHP كخطأ من شأنه أن يجعل موقع الويب الخاص بك عرضة.
|
||||||
|
|
||||||
@ -56,9 +60,10 @@ Cross Site Scripting هو نوع من نقاط الضعف في تطبيق الو
|
|||||||
|
|
||||||
**مثال على سياسة أمان المحتوى التي تم تعيينها في رأس HTTP**
|
**مثال على سياسة أمان المحتوى التي تم تعيينها في رأس HTTP**
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
header("content-security-policy: default-src 'self'; img-src https://*; child-src 'none';");
|
<?php
|
||||||
`
|
header("content-security-policy: default-src 'self'; img-src https://*; child-src 'none';");
|
||||||
|
```
|
||||||
|
|
||||||
#### عيّن سياسة أمان المحتوى كعلامات وصفية
|
#### عيّن سياسة أمان المحتوى كعلامات وصفية
|
||||||
|
|
||||||
@ -66,8 +71,9 @@ Cross Site Scripting هو نوع من نقاط الضعف في تطبيق الو
|
|||||||
|
|
||||||
**مثال على سياسة أمان المحتوى التي تم تعيينها في علامة HTML الوصفية**
|
**مثال على سياسة أمان المحتوى التي تم تعيينها في علامة HTML الوصفية**
|
||||||
|
|
||||||
`<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
|
```HTML
|
||||||
`
|
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
|
||||||
|
```
|
||||||
|
|
||||||
#### معلومات اكثر:
|
#### معلومات اكثر:
|
||||||
|
|
||||||
|
@ -12,11 +12,12 @@ localeTitle: ادراج ملف محلي
|
|||||||
|
|
||||||
### الدفاع عن موقع الويب الخاص بك من هجمات تضمين الملف المحلي في PHP
|
### الدفاع عن موقع الويب الخاص بك من هجمات تضمين الملف المحلي في PHP
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
if(basename($_GET['file]) !== $_GET['file']) {
|
<?php
|
||||||
die('INVALID FILE REQUESTED');
|
if(basename($_GET['file]) !== $_GET['file']) {
|
||||||
}
|
die('INVALID FILE REQUESTED');
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
#### معلومات اكثر:
|
#### معلومات اكثر:
|
||||||
|
|
||||||
|
@ -14,11 +14,12 @@ localeTitle: إدراج الملف عن بعد
|
|||||||
|
|
||||||
سيوفر كود PHP التالي حماية قوية ضد هجمات تضمين الملفات عن بعد
|
سيوفر كود PHP التالي حماية قوية ضد هجمات تضمين الملفات عن بعد
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
if(basename($_GET['file]) !== $_GET['file']) {
|
<?php
|
||||||
die('INVALID FILE REQUESTED');
|
if(basename($_GET['file]) !== $_GET['file']) {
|
||||||
}
|
die('INVALID FILE REQUESTED');
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
* يمكنك تعطيل `allow_url_fopen` في ملف php.ini كحماية إضافية ضد تضمين الملفات عن بعد.
|
* يمكنك تعطيل `allow_url_fopen` في ملف php.ini كحماية إضافية ضد تضمين الملفات عن بعد.
|
||||||
|
|
||||||
|
@ -10,34 +10,35 @@ localeTitle: اختطاف الجلسة
|
|||||||
|
|
||||||
للدفاع ضد هجمات اختطاف جلسة العمل ، يلزمك التحقق من معلومات المتصفح والموقع الحالي للمستخدم مقابل المعلومات المخزنة حول الجلسة. فيما يلي مثال للتنفيذ يمكن أن يساعد في تخفيف آثار هجوم اختطاف جلسة العمل. يقوم بالتحقق من عنوان IP و "وكيل المستخدم" ، وإذا انتهت الجلسة ، قم بإزالة جلسة قبل استئنافها.
|
للدفاع ضد هجمات اختطاف جلسة العمل ، يلزمك التحقق من معلومات المتصفح والموقع الحالي للمستخدم مقابل المعلومات المخزنة حول الجلسة. فيما يلي مثال للتنفيذ يمكن أن يساعد في تخفيف آثار هجوم اختطاف جلسة العمل. يقوم بالتحقق من عنوان IP و "وكيل المستخدم" ، وإذا انتهت الجلسة ، قم بإزالة جلسة قبل استئنافها.
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
session_start();
|
<?php
|
||||||
|
session_start();
|
||||||
// Does IP Address match?
|
|
||||||
if ($_SERVER['REMOTE_ADDR'] != $_SESSION['ipaddress'])
|
// Does IP Address match?
|
||||||
{
|
if ($_SERVER['REMOTE_ADDR'] != $_SESSION['ipaddress'])
|
||||||
session_unset();
|
{
|
||||||
session_destroy();
|
session_unset();
|
||||||
}
|
session_destroy();
|
||||||
|
}
|
||||||
// Does user agent match?
|
|
||||||
if ($_SERVER['HTTP_USER_AGENT'] != $_SESSION['useragent'])
|
// Does user agent match?
|
||||||
{
|
if ($_SERVER['HTTP_USER_AGENT'] != $_SESSION['useragent'])
|
||||||
session_unset();
|
{
|
||||||
session_destroy();
|
session_unset();
|
||||||
}
|
session_destroy();
|
||||||
|
}
|
||||||
// Is the last access over an hour ago?
|
|
||||||
if (time() > ($_SESSION['lastaccess'] + 3600))
|
// Is the last access over an hour ago?
|
||||||
{
|
if (time() > ($_SESSION['lastaccess'] + 3600))
|
||||||
session_unset();
|
{
|
||||||
session_destroy();
|
session_unset();
|
||||||
}
|
session_destroy();
|
||||||
else
|
}
|
||||||
{
|
else
|
||||||
$_SESSION['lastaccess'] = time();
|
{
|
||||||
}
|
$_SESSION['lastaccess'] = time();
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
#### معلومات اكثر:
|
#### معلومات اكثر:
|
||||||
|
|
||||||
|
@ -18,34 +18,35 @@ localeTitle: معرف الجلسة
|
|||||||
|
|
||||||
للدفاع ضد هجمات معرف هوية الجلسة ، يجب عليك التحقق من محاولة الوصول إلى الجلسة مقابل عدة عوامل للتأكيد على ما إذا كان الوصول شرعيًا ولتجنب المستخدم من اختطاف جلسة المستخدم بنجاح. فيما يلي مثال للتنفيذ يمكن أن يساعد في تخفيف آثار هجوم اكتساب معرّف جلسة العمل. ويتحقق من عنوان IP و "وكيل المستخدم" ، وإذا انتهت الجلسة "إزالة جلسة عمل قبل الحصول عليها".
|
للدفاع ضد هجمات معرف هوية الجلسة ، يجب عليك التحقق من محاولة الوصول إلى الجلسة مقابل عدة عوامل للتأكيد على ما إذا كان الوصول شرعيًا ولتجنب المستخدم من اختطاف جلسة المستخدم بنجاح. فيما يلي مثال للتنفيذ يمكن أن يساعد في تخفيف آثار هجوم اكتساب معرّف جلسة العمل. ويتحقق من عنوان IP و "وكيل المستخدم" ، وإذا انتهت الجلسة "إزالة جلسة عمل قبل الحصول عليها".
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
session_start();
|
<?php
|
||||||
|
session_start();
|
||||||
// Does IP Address match?
|
|
||||||
if ($_SERVER['REMOTE_ADDR'] != $_SESSION['ipaddress'])
|
// Does IP Address match?
|
||||||
{
|
if ($_SERVER['REMOTE_ADDR'] != $_SESSION['ipaddress'])
|
||||||
session_unset();
|
{
|
||||||
session_destroy();
|
session_unset();
|
||||||
}
|
session_destroy();
|
||||||
|
}
|
||||||
// Does user agent match?
|
|
||||||
if ($_SERVER['HTTP_USER_AGENT'] != $_SESSION['useragent'])
|
// Does user agent match?
|
||||||
{
|
if ($_SERVER['HTTP_USER_AGENT'] != $_SESSION['useragent'])
|
||||||
session_unset();
|
{
|
||||||
session_destroy();
|
session_unset();
|
||||||
}
|
session_destroy();
|
||||||
|
}
|
||||||
// Is the last access over an hour ago?
|
|
||||||
if (time() > ($_SESSION['lastaccess'] + 3600))
|
// Is the last access over an hour ago?
|
||||||
{
|
if (time() > ($_SESSION['lastaccess'] + 3600))
|
||||||
session_unset();
|
{
|
||||||
session_destroy();
|
session_unset();
|
||||||
}
|
session_destroy();
|
||||||
else
|
}
|
||||||
{
|
else
|
||||||
$_SESSION['lastaccess'] = time();
|
{
|
||||||
}
|
$_SESSION['lastaccess'] = time();
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
**نصائح:**
|
**نصائح:**
|
||||||
|
|
||||||
|
@ -10,33 +10,34 @@ localeTitle: حقن SQL
|
|||||||
|
|
||||||
يقوم البرنامج النصي PHP أدناه بتشغيل عبارة SQL للحصول على البريد الإلكتروني الخاص بالمستخدم بواسطة المعرّف. ومع ذلك ، لا يتم تعقيم الإدخال مما يجعله عرضة لحقن SQL
|
يقوم البرنامج النصي PHP أدناه بتشغيل عبارة SQL للحصول على البريد الإلكتروني الخاص بالمستخدم بواسطة المعرّف. ومع ذلك ، لا يتم تعقيم الإدخال مما يجعله عرضة لحقن SQL
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
$input = $_GET['id'];
|
<?php
|
||||||
$dbserver = "localhost";
|
$input = $_GET['id'];
|
||||||
$dbuser = "camper";
|
$dbserver = "localhost";
|
||||||
$dbpass = "supersecretcampsitepassword";
|
$dbuser = "camper";
|
||||||
$dbname = "freecodecamp";
|
$dbpass = "supersecretcampsitepassword";
|
||||||
|
$dbname = "freecodecamp";
|
||||||
$conn = new mysqli($dbserver, $dbuser, $dbpass, $dbname);
|
|
||||||
|
$conn = new mysqli($dbserver, $dbuser, $dbpass, $dbname);
|
||||||
if ($conn->connect_error) {
|
|
||||||
die("Connection failed: " . $conn->connect_error);
|
if ($conn->connect_error) {
|
||||||
}
|
die("Connection failed: " . $conn->connect_error);
|
||||||
|
}
|
||||||
$sql = "SELECT email FROM users WHERE id =" . $input;
|
|
||||||
|
$sql = "SELECT email FROM users WHERE id =" . $input;
|
||||||
$result = $conn->query($sql);
|
|
||||||
|
$result = $conn->query($sql);
|
||||||
if ($result->num_rows > 0) {
|
|
||||||
while($row = $result->fetch_assoc()) {
|
if ($result->num_rows > 0) {
|
||||||
echo $row["email"];
|
while($row = $result->fetch_assoc()) {
|
||||||
}
|
echo $row["email"];
|
||||||
} else {
|
}
|
||||||
echo "no results";
|
} else {
|
||||||
}
|
echo "no results";
|
||||||
|
}
|
||||||
$conn->close();
|
|
||||||
`
|
$conn->close();
|
||||||
|
```
|
||||||
|
|
||||||
``SELECT email FROM users WHERE id = `$input`;
|
``SELECT email FROM users WHERE id = `$input`;
|
||||||
``
|
``
|
||||||
@ -49,18 +50,19 @@ localeTitle: حقن SQL
|
|||||||
|
|
||||||
**هيتليستينغ:** يتم استخدام نهج القائمة البيضاء في الحالات التي يتوقع فيها بعض المدخلات. يمكنك سرد كل إدخال متوقع في أحد مفاتيح تبديل PHP ومن ثم إعداد افتراضي للإدخال غير الصحيح. لا داعي للقلق بشأن مشكلة في كتابة النوع أو تجاوز مسار الهروب ولكن الإدخال المسموح به محدود بشكل غير محدود. يبقى خيارًا ، راجع المثال أدناه.
|
**هيتليستينغ:** يتم استخدام نهج القائمة البيضاء في الحالات التي يتوقع فيها بعض المدخلات. يمكنك سرد كل إدخال متوقع في أحد مفاتيح تبديل PHP ومن ثم إعداد افتراضي للإدخال غير الصحيح. لا داعي للقلق بشأن مشكلة في كتابة النوع أو تجاوز مسار الهروب ولكن الإدخال المسموح به محدود بشكل غير محدود. يبقى خيارًا ، راجع المثال أدناه.
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
switch ($input) {
|
<?php
|
||||||
case "1":
|
switch ($input) {
|
||||||
//db query 1
|
case "1":
|
||||||
break;
|
//db query 1
|
||||||
case "2":
|
break;
|
||||||
//db query 2
|
case "2":
|
||||||
break;
|
//db query 2
|
||||||
default:
|
break;
|
||||||
// invalid input return error
|
default:
|
||||||
}
|
// invalid input return error
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
**نوع الصب:** يشيع استخدام أسلوب صب النمط لتطبيق يستخدم مدخلات رقمية. قم ببساطة بإدخال الإدخال باستخدام `(int) $input` وسيتم السماح فقط بقيمة رقمية.
|
**نوع الصب:** يشيع استخدام أسلوب صب النمط لتطبيق يستخدم مدخلات رقمية. قم ببساطة بإدخال الإدخال باستخدام `(int) $input` وسيتم السماح فقط بقيمة رقمية.
|
||||||
|
|
||||||
|
@ -10,9 +10,10 @@ localeTitle: جلسات
|
|||||||
|
|
||||||
في كل صفحة تريد الوصول إلى الجلسة ، ستحتاج إلى بدء (أو تحميل) الجلسة. للقيام بذلك ، قم بتشغيل الدالة `session_start()` التي تقوم بتحميل نظام جلسة PHP.
|
في كل صفحة تريد الوصول إلى الجلسة ، ستحتاج إلى بدء (أو تحميل) الجلسة. للقيام بذلك ، قم بتشغيل الدالة `session_start()` التي تقوم بتحميل نظام جلسة PHP.
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
session_start();
|
<?php
|
||||||
`
|
session_start();
|
||||||
|
```
|
||||||
|
|
||||||
تجدر الإشارة إلى أنه عند استخدام الجلسات المستندة إلى ملفات تعريف الارتباط ، يجب استدعاء session\_start () قبل إخراج أي شيء إلى المتصفح. أي شيء آخر سيؤدي إلى خطأ.
|
تجدر الإشارة إلى أنه عند استخدام الجلسات المستندة إلى ملفات تعريف الارتباط ، يجب استدعاء session\_start () قبل إخراج أي شيء إلى المتصفح. أي شيء آخر سيؤدي إلى خطأ.
|
||||||
|
|
||||||
@ -22,26 +23,29 @@ localeTitle: جلسات
|
|||||||
|
|
||||||
في المثال التالي ، ترى أن اختيار المستخدم للموضوع قد تم تعيينه على المظهر رقم واحد.
|
في المثال التالي ، ترى أن اختيار المستخدم للموضوع قد تم تعيينه على المظهر رقم واحد.
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
session_start();
|
<?php
|
||||||
$_SESSION['themechoice'] = 1;
|
session_start();
|
||||||
`
|
$_SESSION['themechoice'] = 1;
|
||||||
|
```
|
||||||
|
|
||||||
يشبه الوصول إلى متغير جلسة إلى إعداد واحد. ما عليك سوى تضمين المتغير الذي تحتاج إلى الوصول إليه. على سبيل المثال صدى بها كما هو موضح في المثال رمز أدناه.
|
يشبه الوصول إلى متغير جلسة إلى إعداد واحد. ما عليك سوى تضمين المتغير الذي تحتاج إلى الوصول إليه. على سبيل المثال صدى بها كما هو موضح في المثال رمز أدناه.
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
session_start();
|
<?php
|
||||||
echo $_SESSION['themechoice'];
|
session_start();
|
||||||
`
|
echo $_SESSION['themechoice'];
|
||||||
|
```
|
||||||
|
|
||||||
### إزالة الجلسة
|
### إزالة الجلسة
|
||||||
|
|
||||||
لإزالة جلسة من النظام ، قم بتشغيل شفرة PHP التالية. سيؤدي ذلك إلى إلغاء تعيين متغيرات الجلسة وحذفها من النظام.
|
لإزالة جلسة من النظام ، قم بتشغيل شفرة PHP التالية. سيؤدي ذلك إلى إلغاء تعيين متغيرات الجلسة وحذفها من النظام.
|
||||||
|
|
||||||
`<?php
|
```PHP
|
||||||
session_unset();
|
<?php
|
||||||
session_destroy();
|
session_unset();
|
||||||
`
|
session_destroy();
|
||||||
|
```
|
||||||
|
|
||||||
### الجلسات مؤقتة
|
### الجلسات مؤقتة
|
||||||
|
|
||||||
|
@ -67,24 +67,25 @@ localeTitle: بيان التبديل
|
|||||||
|
|
||||||
## انتاج |
|
## انتاج |
|
||||||
|
|
||||||
`if case is 1
|
```
|
||||||
> Dice show number One.
|
if case is 1
|
||||||
|
> Dice show number One.
|
||||||
if case is 2
|
|
||||||
> Dice show number Two.
|
if case is 2
|
||||||
|
> Dice show number Two.
|
||||||
if case is 3
|
|
||||||
> Dice show number Three or Four.
|
if case is 3
|
||||||
|
> Dice show number Three or Four.
|
||||||
if case is 4
|
|
||||||
> Dice show number Three or Four.
|
if case is 4
|
||||||
|
> Dice show number Three or Four.
|
||||||
if case is 5
|
|
||||||
> FiveSixDice show number Six.
|
if case is 5
|
||||||
|
> FiveSixDice show number Six.
|
||||||
if case is 6
|
|
||||||
> SixDice show number Six.
|
if case is 6
|
||||||
|
> SixDice show number Six.
|
||||||
if none of the above
|
|
||||||
> Dice show number unknown.
|
if none of the above
|
||||||
`
|
> Dice show number unknown.
|
||||||
|
```
|
@ -8,17 +8,18 @@ localeTitle: تبديل العبارات
|
|||||||
|
|
||||||
### بناء الجملة:
|
### بناء الجملة:
|
||||||
|
|
||||||
`switch(x) {
|
```PHP
|
||||||
case 1:
|
switch(x) {
|
||||||
statement1;
|
case 1:
|
||||||
break;
|
statement1;
|
||||||
case 2:
|
break;
|
||||||
statement2;
|
case 2:
|
||||||
break;
|
statement2;
|
||||||
default:
|
break;
|
||||||
defaultstatement;
|
default:
|
||||||
}
|
defaultstatement;
|
||||||
`
|
}
|
||||||
|
```
|
||||||
|
|
||||||
في المثال أعلاه ، x هي الشرط. سيتم تنفيذ التصريحات التالية للحالة التي تطابق. إذا لم تكن هناك تطابقات ، فسيتم تشغيل العبارة (الألفاظ الافتراضية).
|
في المثال أعلاه ، x هي الشرط. سيتم تنفيذ التصريحات التالية للحالة التي تطابق. إذا لم تكن هناك تطابقات ، فسيتم تشغيل العبارة (الألفاظ الافتراضية).
|
||||||
|
|
||||||
|
@ -6,19 +6,20 @@ localeTitle: بناء الجملة
|
|||||||
|
|
||||||
PHP هي لغة تسمح لك بتضمين محتوى ديناميكي في صفحات ويب ثابتة خلاف ذلك. مكتوب بخط ثابت مع html ، ببساطة إعادة تسمية ملف .html إلى .php (يجب أن يكون خادم الويب مثبتًا على php) للبدء.
|
PHP هي لغة تسمح لك بتضمين محتوى ديناميكي في صفحات ويب ثابتة خلاف ذلك. مكتوب بخط ثابت مع html ، ببساطة إعادة تسمية ملف .html إلى .php (يجب أن يكون خادم الويب مثبتًا على php) للبدء.
|
||||||
|
|
||||||
`<!DOCTYPE html>
|
```PHP
|
||||||
<html>
|
<!DOCTYPE html>
|
||||||
<head>
|
<html>
|
||||||
<title>PHP Example</title>
|
<head>
|
||||||
</head>
|
<title>PHP Example</title>
|
||||||
<body>
|
</head>
|
||||||
<h1>PHP Example</h1>
|
<body>
|
||||||
<?php
|
<h1>PHP Example</h1>
|
||||||
echo "Hello World from PHP!";
|
<?php
|
||||||
?>
|
echo "Hello World from PHP!";
|
||||||
</body>
|
?>
|
||||||
</html>
|
</body>
|
||||||
`
|
</html>
|
||||||
|
```
|
||||||
|
|
||||||
#### معلومات اكثر:
|
#### معلومات اكثر:
|
||||||
|
|
||||||
|
@ -21,9 +21,10 @@ localeTitle: أنواع البيانات PHP
|
|||||||
|
|
||||||
#### مثال
|
#### مثال
|
||||||
|
|
||||||
`$x = "Hello!";
|
```php
|
||||||
$y = 'Hello!';
|
$x = "Hello!";
|
||||||
`
|
$y = 'Hello!';
|
||||||
|
```
|
||||||
|
|
||||||
## عدد صحيح
|
## عدد صحيح
|
||||||
|
|
||||||
@ -38,8 +39,9 @@ localeTitle: أنواع البيانات PHP
|
|||||||
|
|
||||||
#### مثال
|
#### مثال
|
||||||
|
|
||||||
`$x = 5;
|
```php
|
||||||
`
|
$x = 5;
|
||||||
|
```
|
||||||
|
|
||||||
## تطفو
|
## تطفو
|
||||||
|
|
||||||
@ -47,23 +49,26 @@ localeTitle: أنواع البيانات PHP
|
|||||||
|
|
||||||
#### مثال
|
#### مثال
|
||||||
|
|
||||||
`$x = 5.01;
|
```php
|
||||||
`
|
$x = 5.01;
|
||||||
|
```
|
||||||
|
|
||||||
## منطقية
|
## منطقية
|
||||||
|
|
||||||
Boolean يمثل حالتين محتملتين: TRUE أو FALSE. يتم استخدام Booleans غالبًا في الاختبارات الشرطية.
|
Boolean يمثل حالتين محتملتين: TRUE أو FALSE. يتم استخدام Booleans غالبًا في الاختبارات الشرطية.
|
||||||
|
|
||||||
`$x = true;
|
```php
|
||||||
$y = false;
|
$x = true;
|
||||||
`
|
$y = false;
|
||||||
|
```
|
||||||
|
|
||||||
## مجموعة مصفوفة
|
## مجموعة مصفوفة
|
||||||
|
|
||||||
صفيف بتخزين قيم متعددة في متغير واحد.
|
صفيف بتخزين قيم متعددة في متغير واحد.
|
||||||
|
|
||||||
`$colours = array("Blue","Purple","Pink");
|
```php
|
||||||
`
|
$colours = array("Blue","Purple","Pink");
|
||||||
|
```
|
||||||
|
|
||||||
## قيمة فارغة
|
## قيمة فارغة
|
||||||
|
|
||||||
@ -73,11 +78,12 @@ Null هو نوع بيانات خاص يمكن أن يكون له قيمة واح
|
|||||||
|
|
||||||
**ملاحظة:** إذا تم إنشاء متغير بدون قيمة ، فسيتم تعيين قيمة فارغة له تلقائيًا.
|
**ملاحظة:** إذا تم إنشاء متغير بدون قيمة ، فسيتم تعيين قيمة فارغة له تلقائيًا.
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
$x = "Hello world!";
|
<?php
|
||||||
$x = null;
|
$x = "Hello world!";
|
||||||
?>
|
$x = null;
|
||||||
`
|
?>
|
||||||
|
```
|
||||||
|
|
||||||
انتاج:
|
انتاج:
|
||||||
لا شيء
|
لا شيء
|
||||||
@ -90,17 +96,18 @@ Null هو نوع بيانات خاص يمكن أن يكون له قيمة واح
|
|||||||
|
|
||||||
**مثال:**
|
**مثال:**
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
class Car {
|
<?php
|
||||||
function Car() {
|
class Car {
|
||||||
$this->model = "VW";
|
function Car() {
|
||||||
}
|
$this->model = "VW";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// create an object
|
|
||||||
$herbie = new Car();
|
// create an object
|
||||||
|
$herbie = new Car();
|
||||||
// show object properties
|
|
||||||
echo $herbie->model;
|
// show object properties
|
||||||
?>
|
echo $herbie->model;
|
||||||
`
|
?>
|
||||||
|
```
|
@ -10,12 +10,13 @@ localeTitle: المتغيرات
|
|||||||
|
|
||||||
**بناء الجملة:**
|
**بناء الجملة:**
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
$txt = "Hello world!";
|
<?php
|
||||||
$x = 5;
|
$txt = "Hello world!";
|
||||||
$y = 10.5;
|
$x = 5;
|
||||||
?>
|
$y = 10.5;
|
||||||
`
|
?>
|
||||||
|
```
|
||||||
|
|
||||||
بعد تنفيذ العبارات أعلاه ، سيحتوي المتغير $ txt على قيمة Hello world !، وسيحتفظ المتغير $ x بالقيمة 5 ، وسيحتفظ المتغير $ y بالقيمة 10.5.
|
بعد تنفيذ العبارات أعلاه ، سيحتوي المتغير $ txt على قيمة Hello world !، وسيحتفظ المتغير $ x بالقيمة 5 ، وسيحتفظ المتغير $ y بالقيمة 10.5.
|
||||||
|
|
||||||
@ -37,28 +38,31 @@ localeTitle: المتغيرات
|
|||||||
|
|
||||||
سيوضح المثال التالي كيفية إخراج النص والمتغير:
|
سيوضح المثال التالي كيفية إخراج النص والمتغير:
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
$txt = "github.com";
|
<?php
|
||||||
echo "I love $txt!";
|
$txt = "github.com";
|
||||||
?>
|
echo "I love $txt!";
|
||||||
`
|
?>
|
||||||
|
```
|
||||||
|
|
||||||
سينتج المثال التالي نفس الإخراج مثل المثال أعلاه:
|
سينتج المثال التالي نفس الإخراج مثل المثال أعلاه:
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
$txt = "github.com";
|
<?php
|
||||||
echo "I love " . $txt . "!";
|
$txt = "github.com";
|
||||||
?>
|
echo "I love " . $txt . "!";
|
||||||
`
|
?>
|
||||||
|
```
|
||||||
|
|
||||||
سينتج المثال التالي مجموع متغيرين:
|
سينتج المثال التالي مجموع متغيرين:
|
||||||
|
|
||||||
`<?php
|
```php
|
||||||
$x = 5;
|
<?php
|
||||||
$y = 4;
|
$x = 5;
|
||||||
echo $x + $y;
|
$y = 4;
|
||||||
?>
|
echo $x + $y;
|
||||||
`
|
?>
|
||||||
|
```
|
||||||
|
|
||||||
# PHP هي لغة مكتوبة بشكل فضفاض
|
# PHP هي لغة مكتوبة بشكل فضفاض
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user