procedure proc1 namespace namespace1 messagebox("Namespace is " + namespace()) public pub1 = "Public variable declared in proc1" return procedure proc2 namespace namespace2 messagebox("Namespace is " + namespace()) public pub1 = "Public variable declared in proc2" return proc1() proc2() display memory ? namespace1.pub1 ? namespace2.pub1 namespace messagebox("Namespace is " + namespace()) public pub1 = "Public variable, no namespace active" ? pub1 ?
output
Namespaces: ------------------------ NAMESPACE1 Dynamic array (refcnt 2) .PUB1 Character 'Public variable declared in proc1' NAMESPACE2 Dynamic array (refcnt 2) .PUB1 Character 'Public variable declared in proc2' Memory Variables: ------------------------ ** Total of ** 4 variables defined and 298 bytes used. Public variable declared in proc1 Public variable declared in proc2 Public variable, no namespace active
https://www.lianja.com/doc/index.php/NAMESPACE
procedure proc1 namespace namespace1 messagebox("Namespace is " + namespace()) public pub1 = "Public variable declared in proc1" return procedure proc2 namespace namespace2 messagebox("Namespace is " + namespace()) public pub1 = "Public variable declared in proc2" return proc1() proc2() display memory ? namespace1.pub1 ? namespace2.pub1 namespace messagebox("Namespace is " + namespace()) public pub1 = "Public variable, no namespace active" ? pub1 ?
output
Namespaces: ------------------------ NAMESPACE1 Dynamic array (refcnt 2) .PUB1 Character 'Public variable declared in proc1' NAMESPACE2 Dynamic array (refcnt 2) .PUB1 Character 'Public variable declared in proc2' Memory Variables: ------------------------ ** Total of ** 4 variables defined and 298 bytes used. Public variable declared in proc1 Public variable declared in proc2 Public variable, no namespace active
When developing custom sections in the Visual FoxPro scripting language it is a good practice to encapsulate the custom section or gadget code into a unique namespace.
You declare a namespace using the namespace command. e.g.
namespace mycustomsection public state // updating the "state" variable in the namespace state = 1
Whenever any events are dispatched to an object e.g. a click event for a Commandbutton, Lianja will automatically activate the namespace that the object belongs to. This prevents any name clashes across individual custom section or gadget code.
You can treat a namespace just like any other object variable and reference property elements in it. e.g
namespace mycustomsection public state define class mybutton as commandbutton proc click() if mycustomsection.state = 1 // handle state 1 endif endproc enddefine
https://www.lianja.com/doc/index.php/Developing_Lianja_Custom_Sections_in_Visual_FoxPro